Java NIO服务器基于转向的游戏

时间:2013-01-17 01:31:28

标签: java nio

我正在制作一款基于回合制的多人游戏,可以在游戏中使用。基本上一个玩家举办一场比赛而另一个人加入比赛,然后比赛结束。我的服务器需要处理这些匹配并每5秒为客户端提供一次更新。我通常使用timer / thread.sleep()来做这件事。我的问题是我不确定如何同时为多个匹配执行此操作。我觉得每场比赛使用一个帖子会很荒谬,因为它比任何事情都要闲置得多。

我的一个想法是只有一个线程以5秒的间隔更新每个匹配。我觉得唯一的问题是,当很多比赛一次进行时,最后更新的比赛可能会有相当多的延迟。 (我不知道这会是多么重要,因为我的游戏基于时间,但它看起来很原始)。

我的另一个选择是使用ScheduledExecutorService(线程池),这似乎很有希望。

  1. 我是否会遇到ScheduledExecutorService线程池的问题,因为我还在为套接字连接运行线程池?

    2.有没有更好的方法来实现我想要实现的目标?

  2. 只是为了澄清我正在寻找一种基本上每场比赛每5秒钟调用一次功能的方法。例如:

    我的游戏从0开始,游戏从2秒开始。服务器将调用更新函数:

    对我来说:0,5,10,15,20,25等...

    对你:2,7,12,17,22,27等......

1 个答案:

答案 0 :(得分:0)

如果我理解你的错误“我的一个想法是只有一个线程以5秒的间隔更新每场比赛。” 最好每秒运行更新脚本,但更新匹配哪个ID mod 5 == 0。 这可以减少HOT秒的不良影响。

thread.sleep()也很糟糕,并不能保证完全严格的时间。 thread.sleep(5000) - 平均睡眠时间至少为5秒(但在坏情况下它可能是10秒,事件更多)

查看Java Timerhttp://www.javacodegeeks.com/2012/07/quartz-2-scheduler-example.html

我认为使用TimerTask会做出很好的决定。

另见java timer for game

更新:如果你还没有使用它,那么“{3}}上的”主题“通知就会显示出来:) 使用异步非阻塞I / O只需一个线程即可实现10000个并发连接。 (在实例10 - 160 k连接上它真实的商业项目)