テスト目的で仲裁アプリケーションをモックアップする簡単な方法を探しています。アイデアは、3 つの個別のノード (3 つの異なるコンピューター上) を作成することです。これらのノードは、テスト中の C# サーバー ソケットのクライアントとして機能します。4 つのクライアント サーバー接続をセットアップしようとしているとしましょう。アービターに、どのノードがどの接続を取得するかをランダムに決定してもらいたいと思います。ノードの 1 つが停止した場合 (アプリケーションがシャットダウンされた場合)、アービターがその接続を別のノードに渡すようにしたいと考えています。ノードが再びオンになったら、アービターに接続を再分配してもらいたいです。リンクやサンプルコードは非常に役立ちます。
2 に答える
ソケット接続はそのようには機能しません - それらは 2 台のマシン間で作成されます。幸いなことに、新しい接続を作成するコストはそれほど大きくありません。
Berkely Socketsを詳しく知りたい場合は、 Berkely Socketsを読む価値があります。
実際の接続オブジェクトを気にするのではなく、接続の総数を気にするという意味でない限り。その場合、接続の総数を制御するために使用できるのはSemaphoreまたはSemaphoreSlimです。これにより、最大数に達するまで接続をランダムに分散できます。次に、接続が失われると、セマフォが使い果たされるまで再配布します。新しいクライアントが接続したら、逆のプロセスを実行できます。数が好みのバランスになるまで、ランダムな現在のクライアントへの接続を閉じ、新しいクライアントへの新しい接続を開きます。
それがあなたの考えであったかどうか教えてください - あなたが何か他のことを考えていたとしても、私はあまり深く入りたくありません.
コンピュータ間でソケットを実際に「渡す」ことはできません。それらを作成すると、TCP/IP スタックは、TCP シーケンス番号など、転送できないすべての種類の設定を割り当てます。ただし、できることは、すべての着信接続で「アービター」を維持することです。その後、アービターはノードへの別のソケットを作成し、2 つの間のプロキシとして機能します。
負荷分散の一般的なアーキテクチャを調べる必要があります。これはまさにあなたが望んでいるものだと思います