我必须用 Python 从头开始编写一个可靠的、完全有序的多播系统。我不能使用任何外部库。我被允许使用中央音序器。
似乎有两种直接的方法:
- 编写一个高效的系统,为每个多播消息附加一个唯一的 id,为其接收到的消息 id 具有定序器多播序列号,并来回发送 ACK 和 NACK。
- 编写一个低效的泛洪系统,其中每个多播器只需重新发送它接收到的每条消息一次(除非它是由那个特定的多播器发送的。)
我被允许使用第二个选项,并且倾向于这样做。
我目前正在多播 UDP 消息(这似乎是唯一的选择),但这意味着某些消息可能会丢失。这意味着我必须能够唯一标识每个发送的 UDP 消息,以便可以根据 #2 重新发送它。我真的应该生成唯一的数字(例如使用发件人地址和计数器)并将它们打包到每个发送的 UDP 消息中吗?我该怎么做呢?以及如何在 Python 中接收单个 UDP 消息,而不是数据流(即socket.recv
)?