Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我目前正计划在我的游戏中使用 Java 网络库 Kryonet。我将使用 UDP 协议,因为它比 TCP 更快。我喜欢 Kryonet API,它的代码非常简洁,但是当我只希望服务器在 UDP 上运行时,它似乎只允许在TCP和 UDP 上运行服务器。
我认为您不应该假设 UDP 比 TCP“快”。TCP SACK和NACK数据包允许比旧的 TCP 仅滑动窗口系统更快的重传请求,并且显式拥塞通知增强功能使对等点更容易以接近网络可以处理的最大速度进行通信。(UDP 将继续发送数据,而不会注意到导致丢包的拥塞。)
测试几个预期对等点之间的带宽、延迟和丢包率,看看哪一个表现更好。我敢打赌,结果几乎一样。
Kryonet 实际上只支持一种协议的连接,但是这一种协议必须是 TCP。没有可能的仅 UDP 连接。TCP 是强制性的。
原因是,kryonet 使用 TCP 处理所有内部请求,如服务器发现、ping 或连接握手。在 UDP 中执行此操作需要逻辑来处理 kryonet 尚未实现的丢弃或错误排序的包。