-1

面白いものを作っているときに問題が発生しました。もちろん、ソケットを使用して、リングトポロジで複数のホスト (10 のように多くはありません) を接続する必要があります。

ここで注意が必要なのは、ソケット接続における役割、つまりサーバーとクライアントです。私が懸念している条件では、相互に接続するための対称的な方法が必要です (すべてのホストが同等です)。ただし、ソケットは、サーバーとクライアントが必要な非対称の方法しか提供できません。

実際、私は解決策を思いつきました。各ホストについて、左隣に接続されたソケットはサーバーとして機能し、右隣に接続されたソケットはクライアントとして機能します。これは機能し、スケーラブルです。しかし、とにかくそれほど単純ではありません。

誰かがより良い解決策を考え出すことができますか、それとも単にこれが最高だと私に言いますか? :) すばらしい洞察をありがとう。

4

2 に答える 2

0

最も簡単で最も堅牢なのは、各ノードに双方向のクライアントとサーバーがあることです。接続がない場合は、双方向の接続を試みます。

2 つのホスト間で突然 2 つの接続が発生する状況が発生した場合、各ノードの IP アドレスを使用して、どの接続が閉じられているかを判断できます。たとえば、IP が大きいホストはクライアント接続を閉じますが、IP が小さいホストはサーバー接続を閉じます (両方で同じである限り、IP の「小さい」値と「大きい」値をどのように定義してもかまいません)。もう一方の接続は有効なままです。

于 2013-09-04T08:12:00.003 に答える
0

ある方法でデザインをリラックスさせることができます。基本的に、2 つのネイバー ペアのそれぞれについて、両方のネイバーで TCP リスナーをフロートさせ、ランダムな時間待機/スリープさせます。誰が最初にウェイクアップしても、(connect() を使用して) 接続を開始します。このようにして、右のピアが左のピアに接続することを心配する必要はありません。

于 2013-09-04T05:50:02.433 に答える