【问题标题】:Thread For Each Game Room In Java Server?Java服务器中每个游戏室的线程?
【发布时间】:2018-05-03 02:32:50
【问题描述】:

我正在开发一个多人游戏,它有一个大厅,人们可以在其中加入不同的游戏。

我很好奇是否应该为每个游戏室创建一个线程。

我正在使用 java.io,所以我已经为每个播放器设置了一个线程。

即使每个线程上的负载不重,也会有很多线程会减慢我的服务器速度吗?

如果我为 100 个玩家和 30 个房间托管一个服务器,平均虚拟服务器可以同时处理 150 个线程吗?还是会影响游戏体验?

这是一个实时游戏,我需要为每个位置更新 (UDP) 发送即时消息?

【问题讨论】:

  • 一般来说,线程数多于你可以同时做的事情会损害性能。但是由于数字如此之小,性能上的微小差异可能不值得额外的复杂性。 (在不切换线程 130 次左右的情况下,您无法为 100 个客户端和 30 个房间中的每一个都做一点工作,从而导致性能成本。通过更高效的设计,可以避免所有这些上下文切换。 )
  • @DavidSchwartz 是的,每个玩家都有单独的对象,并且连接使设计更加容易。感谢您的建议,最好专注于我的设计而不是过多地担心其他事情:)

标签: java multithreading networking server multiplayer


【解决方案1】:

线程(如您所知)只是允许任务同时运行。拥有大量线程并不总是有助于或不利于服务器速度,这受到其他因素的限制,例如您的互联网速度或计算机的处理能力。另一边的人的游戏会以计算机处理所有请求的速度运行,即使你有 10000 个线程,它们都需要处理能力和通过互联网的连接。

简而言之,服务器和客户端的速度会受到使用您服务器的其他人的影响,速度将受到您的互联网连接速度和/或您的 CPU 能力的限制。强>

如果这还没有回答您的问题,请更清楚地定义实际问题,而不是问很多一般性问题。

编辑: 阅读您的评论后,我的建议是:做任何您认为最适合服务器的事情。拥有大量股线不会影响您的服务器的好坏。 :)

【讨论】:

  • 谢谢这让我感到足够安慰。我只是想知道它是否不会很糟糕,即使它不是服务器的最佳选择。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
相关资源
最近更新 更多