gpt4 book ai didi

java - 实时游戏服务器最有效的 Java 实现是什么?

转载 作者:可可西里 更新时间:2023-11-01 02:30:26 26 4
gpt4 key购买 nike

我正计划构建一个 Java 服务器来处理客户端之间的实时游戏通信。最好的 Java 实现类型是什么,它可以在客户端和服务器之间以高速(比如每秒 5-15 个数据包)高效且准确地进行通信?我知道有许多类型的 Java 网络 API(即 ObjectInputStream 和 ObjectOutputStream、DatagramPacket、KyroNet 等),但我不确定对于这种情况最有效和/或最常用的实现是什么。我假设大多数实时游戏都使用 UDP 通信方法,但我理解随之而来的可靠性问题。是否有具有某种形式的流量控制的 UDP 实现?无论如何,提前致谢!

最佳答案

需要考虑的几件事:

  • Java NIO 非常好,可以处理您正在寻找的吞吐量/延迟类型。不要使用任何旧的网络/序列化框架和 API
  • 延迟 非常重要。您基本上需要 NIO 上的最小层,允许您以最小的开销发送非常快速、小的、单独的消息。
  • 根据游戏的不同,您可能需要 TCP 或 UDP 或两者。将 TCP 用于重要消息,将 UDP 用于游戏进行时并非绝对必要的消息或将被包含在未来更新中的消息(例如 FPS 中的位置更新)
  • 有些人为实时游戏实现了他们自己的 基于 UDP 的类似 TCP 的消息传递协议(protocol)。这可能比它的值(value)更麻烦,但如果您真的需要针对特定​​类型的通信进行优化,请注意将其作为一种选择
  • 对于实时游戏,您几乎总是在进行自定义序列化(例如,仅发送增量而不是对象位置的完整更新)- 因此请确保您的框架允许这样做

鉴于此,我推荐以下其中一项

  • Kryonet - 轻巧,可定制,专为此类目的而设计
  • Netty - 稍微更面向企业,但非常有能力、健壮和可扩展
  • 在 NIO 的基础上自行开发 - 比较棘手,但如果您想要真正精细的控制,则可行。我以前做过,但回想起来我可能应该选择 Kryonet 或 Netty

祝你好运!

关于java - 实时游戏服务器最有效的 Java 实现是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5943383/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com