ローカル ネットワーク A と B に 2 つのアプリケーションがあります。アプリケーション A はサーバーであり、データの配列をアプリケーション B のすべてのインスタンスにブロードキャストする必要があります。アプリケーション B のインスタンスがこの配列のアイテムを受信した場合、別の B インスタンスは受信しません。アプリケーション B がアプリケーション A の開始前または開始後に開始できる場合は、このアイテムを受け取ります (2 つのアプリケーション間の通信は影響しません)。このシナリオを適用する .NET の最適なテクノロジまたは方法は何ですか?
1 に答える
単一配信とは、これが実際にはブロードキャストではないことを意味します。「ブロードキャスト」して 1 つの受信者に限定することはできません。A を動作させる必要があるということは、それを TCP ソケットにすることはできないということです。
ワーク キューとして真ん中にミドルウェア ボックスが必要なようです。A はアイテムをキューに追加でき、B のインスタンスはアイテムをデキューできます。セットアップが簡単で、無料で、非常に効率的であるため、私は redis のようなものを使用します。redis のコンテキストでは、A がRPUSH
(新しいアイテムを最後に配置するために) 呼び出し、各 B がLPOP
(最初からアイテムを削除するために) 呼び出します。データがない場合、各 B は単純に定期的にポーリングできます。データが削除されるとLPOP
、データがなくなるまでループし、代わりに定期的にポーリングできます。BLPOP
きつくループしたくない場合は、ブロッキング ポップ ( ) もありますが、個人的には好きではありません。新しいデータをすぐに知る必要がある場合は、組み込みの pub/sub ( PUBLISH
/SUBSCRIBE
) を使用して、クライアントがLPOP
.
.NET で使用できるさまざまな redis クライアントがあります。
上記の個々のコマンドを除いて、上記のほとんどは任意の形式のメッセージ バスに変換されます。MSMQなど