我现在要用socket和多线程实现一个多人玩的游戏。要求每个人可以看到所有人的计分表,如图于是我在server端弄了个list叫allOut,想每次连接一个客户端就把他的输出流装进去。然后遍历发给所有客户端。但是现在问题是。第一个客户端连上后,allOut长度为1。所以遍历时候也只是输出了自己的对象。只有到最后一个客户端allOut这个list才把所有的输出流装进去了。所以如何让所有线程可以共享这个allOut List?或者有什么更好的方法可以实现这个需求呢?真的很紧急,拜托各位大佬了
调试欢乐多
端游,可以考虑用NIO技术,可以考虑Netty框架。
页游的话,可以关注下webSocket。
public static volatile List<Socket> clientSockets = new ArrayList<Socket>();
这其实一个实时推送的问题; 我们之前有过项目经验, 提示你可以采用websocket + mina 建立tcp长连接的方式, 对session进行维护起来, 然后我们需要例如每隔1s就采用我们维护的session来push一次数据(玩家的得分数据);websocket 和 mina 之前通信需要通过一个filter 可以参考github开源项目:https://github.com/coopci/mina-websocket-filter.git
当游戏有戏用户加入时(新用户的socke和UI加入游戏用户列表),触发某个回调
回调方法就是遍历游戏用户表,把UI信息通过socket发给各个游戏用户