java 游戏使用 TCP 和 UDP
Using TCP and UDP for java game
我正在制作一个实时 java 游戏供我的朋友在 LAN 上玩。该游戏在客户端-服务器架构中运行,并且它现在对所有内容都使用 UDP(用于位置更新和加入游戏)。当我和我的朋友通过 Internet 测试游戏时,一些重要的 UDP 数据包丢失了(比如生成敌人的数据包)。
所以我的问题是,制作实时多人游戏的最佳解决方案是什么?我可以将 UDP 用于必要的更新数据包,将 TCP 用于诸如登录、断开连接、聊天等数据包吗?我可以在同一个端口和套接字上使用这两种协议吗?
你最好的选择就是使用 TCP。除了为您提供重新发送功能,这样您就不必自己编写它们,连同主机关闭等其他好的功能,TCP 还将使处理路由器和防火墙变得容易得多。
我确实建议关闭 Nagle 算法,以便始终立即发送数据。
你可以结合使用 both.Sometimes 你可能需要可靠的数据,到时候你需要 TCp.Sometimes 它不是必需的,所以你可以同时使用 UDP.Combine 两者。
只是想帮助那些偶然发现其他答案中令人难以置信的糟糕建议的路人。对不起,我相信这是善意的。如果您有任何实时方面的要求,请不要在游戏中使用 TCP。以后的某个时候你会后悔的。
您想要的是通过 UDP 实现 reliability/connections。 Gaffer on Games 有一个关于这个主题的精彩系列。我诚挚地推荐所有对此主题感兴趣的人阅读整个系列。这是 post 的 link 描述 "connections" 通过 UDP:https://gafferongames.com/post/virtual_connection_over_udp/
你很幸运 - 他们甚至在开源库中实现了所有这些<3 https://github.com/networkprotocol/yojimbo
我正在制作一个实时 java 游戏供我的朋友在 LAN 上玩。该游戏在客户端-服务器架构中运行,并且它现在对所有内容都使用 UDP(用于位置更新和加入游戏)。当我和我的朋友通过 Internet 测试游戏时,一些重要的 UDP 数据包丢失了(比如生成敌人的数据包)。
所以我的问题是,制作实时多人游戏的最佳解决方案是什么?我可以将 UDP 用于必要的更新数据包,将 TCP 用于诸如登录、断开连接、聊天等数据包吗?我可以在同一个端口和套接字上使用这两种协议吗?
你最好的选择就是使用 TCP。除了为您提供重新发送功能,这样您就不必自己编写它们,连同主机关闭等其他好的功能,TCP 还将使处理路由器和防火墙变得容易得多。
我确实建议关闭 Nagle 算法,以便始终立即发送数据。
你可以结合使用 both.Sometimes 你可能需要可靠的数据,到时候你需要 TCp.Sometimes 它不是必需的,所以你可以同时使用 UDP.Combine 两者。
只是想帮助那些偶然发现其他答案中令人难以置信的糟糕建议的路人。对不起,我相信这是善意的。如果您有任何实时方面的要求,请不要在游戏中使用 TCP。以后的某个时候你会后悔的。
您想要的是通过 UDP 实现 reliability/connections。 Gaffer on Games 有一个关于这个主题的精彩系列。我诚挚地推荐所有对此主题感兴趣的人阅读整个系列。这是 post 的 link 描述 "connections" 通过 UDP:https://gafferongames.com/post/virtual_connection_over_udp/
你很幸运 - 他们甚至在开源库中实现了所有这些<3 https://github.com/networkprotocol/yojimbo