我正在制作一款基于回合制的多人游戏,可以在游戏中使用。基本上一个玩家举办一场比赛而另一个人加入比赛,然后比赛结束。我的服务器需要处理这些匹配并每5秒为客户端提供一次更新。我通常使用timer / thread.sleep()来做这件事。我的问题是我不确定如何同时为多个匹配执行此操作。我觉得每场比赛使用一个帖子会很荒谬,因为它比任何事情都要闲置得多。
我的一个想法是只有一个线程以5秒的间隔更新每个匹配。我觉得唯一的问题是,当很多比赛一次进行时,最后更新的比赛可能会有相当多的延迟。 (我不知道这会是多么重要,因为我的游戏基于时间,但它看起来很原始)。
我的另一个选择是使用ScheduledExecutorService(线程池),这似乎很有希望。
我是否会遇到ScheduledExecutorService线程池的问题,因为我还在为套接字连接运行线程池?
2.有没有更好的方法来实现我想要实现的目标?
只是为了澄清我正在寻找一种基本上每场比赛每5秒钟调用一次功能的方法。例如:
我的游戏从0开始,游戏从2秒开始。服务器将调用更新函数:
对我来说:0,5,10,15,20,25等...
对你:2,7,12,17,22,27等......
答案 0 :(得分:0)
如果我理解你的错误“我的一个想法是只有一个线程以5秒的间隔更新每场比赛。” 最好每秒运行更新脚本,但更新匹配哪个ID mod 5 == 0。 这可以减少HOT秒的不良影响。
thread.sleep()也很糟糕,并不能保证完全严格的时间。 thread.sleep(5000) - 平均睡眠时间至少为5秒(但在坏情况下它可能是10秒,事件更多)
查看Java Timer和http://www.javacodegeeks.com/2012/07/quartz-2-scheduler-example.html。
我认为使用TimerTask会做出很好的决定。
更新:如果你还没有使用它,那么“{3}}上的”主题“通知就会显示出来:) 使用异步非阻塞I / O只需一个线程即可实现10000个并发连接。 (在实例10 - 160 k连接上它真实的商业项目)