很紧急,求助各位大佬,关于java多线程和socket问题

LikeInsane 2019-10-07 07:07:18
我现在要用socket和多线程实现一个多人玩的游戏。要求每个人可以看到所有人的计分表,如图

于是我在server端弄了个list叫allOut,想每次连接一个客户端就把他的输出流装进去。

然后遍历发给所有客户端。但是现在问题是。第一个客户端连上后,allOut长度为1。所以遍历时候也只是输出了自己的对象。只有到最后一个客户端allOut这个list才把所有的输出流装进去了。所以如何让所有线程可以共享这个allOut List?或者有什么更好的方法可以实现这个需求呢?真的很紧急,拜托各位大佬了
...全文
152 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-10-08
  • 打赏
  • 举报
回复
我觉得应该有个游戏用户列表来管理socke和UI
当游戏有戏用户加入时(新用户的socke和UI加入游戏用户列表),触发某个回调
回调方法就是遍历游戏用户表,把UI信息通过socket发给各个游戏用户
ninuxGithub 2019-10-08
  • 打赏
  • 举报
回复
理解一下楼主的大概的意思就是 随着用户陆续的登录,就会有玩家的数量增加, 每个玩家都有类来封装了游戏中的参数, 这些数据是动态的, 需要实时的推送给页面前段; 这其实一个实时推送的问题; 我们之前有过项目经验, 提示你可以采用websocket + mina 建立tcp长连接的方式, 对session进行维护起来, 然后我们需要例如每隔1s就采用我们维护的session来push一次数据(玩家的得分数据); websocket 和 mina 之前通信需要通过一个filter 可以参考github开源项目:https://github.com/coopci/mina-websocket-filter.git
瘦死的黑骆驼 2019-10-08
  • 打赏
  • 举报
回复
没明白你说的“只有到最后一个客户端allOut这个list才把所有的输出流装进去了”,你不是多线程吗,每次连接一个客户端直接加到集合就是了,你的集合最好这样定义 public static volatile List<Socket> clientSockets = new ArrayList<Socket>();
小包包007 2019-10-07
  • 打赏
  • 举报
回复
如何让线程共享list集合?使用单例模式下构建个线程安全的list就好了
oh_Maxy 2019-10-07
  • 打赏
  • 举报
回复
要看你做的 是端游还是页游了。
端游,可以考虑用NIO技术,可以考虑Netty框架。
页游的话,可以关注下webSocket。

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧