实时游戏服务器最有效的Java实现是什么?
我计划构建一个Java服务器,用于处理客户端之间的实时游戏通信。最好的Java实现类型是什么,能够高效地(希望能够)准确地在客户机和服务器之间进行高速通信(比如每秒5-15个数据包)?我知道有很多类型的Java网络API(即ObjectInputStream和ObjectOutputStream、DatagramPacket、KyroNet等),但我不确定在这种情况下最有效和/或最常用的实现是什么。我假设大多数实时游戏都使用UDP通信方法,但我理解随之而来的可靠性问题。是否存在具有某种形式的流控制的UDP实现?无论如何,先谢谢你 需要考虑的几件事:实时游戏服务器最有效的Java实现是什么?,java,tcp,udp,real-time,Java,Tcp,Udp,Real Time,我计划构建一个Java服务器,用于处理客户端之间的实时游戏通信。最好的Java实现类型是什么,能够高效地(希望能够)准确地在客户机和服务器之间进行高速通信(比如每秒5-15个数据包)?我知道有很多类型的Java网络API(即ObjectInputStream和ObjectOutputStream、DatagramPacket、KyroNet等),但我不确定在这种情况下最有效和/或最常用的实现是什么。我假设大多数实时游戏都使用UDP通信方法,但我理解随之而来的可靠性问题。是否存在具有某种形式的流控
- Java NIO非常好,可以处理您所期望的吞吐量/延迟。不要使用任何旧的网络/序列化框架和API
- 延迟非常重要。您基本上希望NIO上有一个最小的层,它允许您以最小的开销发送非常快速、小、独立的消息
- 根据游戏的不同,您可能需要TCP或UDP或两者兼有。对于重要的消息使用TCP,对于游戏进行不严格需要的消息使用UDP,或者对于将来的更新(例如FPS中的位置更新)将包含的消息使用UDP
- 有些人通过UDP实现自己的类似TCP的消息传递协议,用于实时游戏。这可能比它的价值更麻烦,但如果您确实需要优化特定类型的通信,请注意它是一个选项
- 对于实时游戏,您几乎总是执行自定义序列化(例如,仅发送增量而不是对象位置的完全更新),因此请确保您的框架允许这样做
- -lightwieght,可定制,专为此类目的设计
- -稍微面向企业,但功能强大、健壮且可扩展
- 基于NIO推出您自己的应用程序-如果您想要真正细粒度的控制,这很棘手,但也有可能。我以前做过,但现在回想起来,我可能应该选择克鲁内特或内蒂
祝你好运 立即忘记ObjectOutputStream和ObjectInputStream。这些是旧标准java序列化的标准输出-输入机制,该机制速度慢,会生成膨胀对象。以下是一些资源: