我一直在为自己的游戏开发项目编写自己的网络引擎。这需要具有不可靠、可靠和有序可靠消息的选项。然而,我还不能确定可靠和有序可靠协议所必需的所有机制。
UDP 上的可靠层所需的机制是什么?额外的细节表示赞赏。
到目前为止,我认为这些是要求:
- 使用序列号确认收到的消息。
- 在重传时间到期后重新发送未确认的消息。
- 跟踪每个目的地的往返时间,以便计算适当的重传时间。
- 识别并删除重复的数据包。
- 处理循环溢出的序列号。
这影响了我的架构,使其具有带有序列和时间戳的可靠消息标头、回显接收到的序列和时间戳的确认消息、用于根据地址跟踪适当重传时间的系统以及 a) 接收消息并将它们排队以供用户接收的线程, b) 确认可靠消息,以及 c) 用过期的重传定时器重传未确认的消息。
注意: 可靠的 UDP 与 TCP 不同。甚至有序可靠的 UDP 也不等同于 TCP。我并不是暗地里不知道我真的想要 TCP。此外,在有人玩语义游戏之前,是的……可靠的 UDP 是“矛盾的”。这是一个基于 UDP 的层,可实现可靠的交付。