4

ピア ツー ピア ネットワーク アプリケーションを作成したいのですが、次の問題があります。

ネットワーク内の 2 つのノード A と B が同時に相互接続を確立しようとしています。両方が他方の接続を受け入れると、2 つの TCP ソケットが開かれます。

双方向の通信には 1 つのソケットで十分なので、2 つの間の通信には 1 つのソケットのみを使用する必要があります。この問題に対するエレガントな解決策は何ですか?

ありがとう!

4

1 に答える 1

6

同時に 2 つの同時接続を確立しようとしないでください。これは、p2p 設計の欠陥です。2 つのピアは相互に調整する必要があります (たとえば、両方が接続されており、両方が誰であるかを認識している中央サーバーを介してメッセージを交換するなど)。誰が聞いているのか、誰が接続しているのかを最初に決定する必要があります。一方のピアはリッスン ソケットを開くだけで、その情報がもう一方のピアに送信されるため、接続先がわかります。その接続が失敗した場合 (つまり、リスニング ピアが NAT/ファイアウォールの背後にある場合)、ピアに通知し、役割を交換する決定を下す必要があります。以前に接続していたピアがリッスン ソケットを開き、その情報が以前にリッスンしていたピアに送信されるため、どこに接続するかがわかります。その接続が失敗した場合 (つまり、現在リッスンしているピアも NAT/ファイアウォールの背後にある)、その場合、2 つのピア間の直接接続は、追加の支援 (たとえば、NAT ホール パンチング) なしでは不可能です。状況によっては、直接接続が不可能な場合もあるため、それらの間で交換されるデータは、中央サーバーを介してプロキシする必要があります。

于 2013-01-30T21:12:20.203 に答える