信頼できる完全に順序付けされたマルチキャスト システムを Python でゼロから作成する必要があります。外部ライブラリを使用できません。セントラルシーケンサーの使用を許可されています。
2つの直接的なアプローチがあるようです:
- 効率的なシステムを作成し、マルチキャストされた各メッセージに一意の ID を添付し、受信したメッセージ ID のシーケンサー マルチキャスト シーケンス番号を持ち、ACK と NACK をやり取りします。
- 各マルチキャスターが一度受信した各メッセージを単純に再送信する非効率的なフラッディング システムを作成します (その特定のマルチキャスターによって送信された場合を除く)。
私は 2 番目のオプションを使用することを許可されており、そうする傾向があります。
現在、UDP メッセージをマルチキャストしています (これが唯一のオプションのようです) が、これは、一部のメッセージが失われる可能性があることを意味します。つまり、#2 に従って再送信できるように、送信された各 UDP メッセージを一意に識別できなければなりません。本当に一意の番号を生成し (たとえば、送信者アドレスとカウンターを使用して)、それらを送信されるすべての UDP メッセージにパックする必要がありますか? どうすればそれを行うことができますか?データのストリームではなく、単一の UDP メッセージを Python で受信するにはどうすればよいですか (つまりsocket.recv
)?