TCP/IP ソケットを使用して複数の宛先に同じメッセージを送信するための最良の方法を探しています。Windows で既存の VS 2010 C++ アプリケーションを使用しています。可能であれば、複雑さの多くがすでに解決されている標準ライブラリ/デザイン パターン アプローチを使用することを望んでいます。
これが私が考えているアプローチの 1 つです。1 つのメイン スレッドがデータベースからメッセージを取得し、それらをある種のスレッド セーフ キューに追加します。アプリケーションには、宛先サーバーへのクライアント ソケット接続ごとに 1 つのスレッドもあります。これらのスレッドはそれぞれ、スレッド セーフ キューから読み取り、tcp/ip ソケットを介してメッセージを送信します。ただし、これよりも優れた/単純な/より堅牢なアプローチがあるかもしれません..
私が気にしなければならない問題は、主にレイテンシです。宛先はどこにでもある可能性があり、1 つのソケット接続と別のソケット接続の間にかなりの遅延が発生する可能性があります。メッセージは、正確な FIFO 順序ですべての宛先に送信される必要があります。
また、1 つの宛先がプライマリ宛先と見なされます。例外なく、すべてのメッセージがこの宛先に到達する必要があります。他の宛先、つまり非プライマリの場合、メッセージは単なるコピーであり、非プライマリの宛先がいくつかのメッセージを受信しなくても、絶対に重要ではありません。任意の時点で、非プライマリ宛先の 1 つがプライマリ宛先になる可能性があります。送信先の 1 つが大幅に遅れている場合、そのスレッドは主要な送信先に追いつく必要がありますが、一部のメッセージはスキップされます。
提案を探しています。これまでの予備調査では、私の状況は、単一のプロデューサーと複数のコンシューマーのパターン、またはおそらく Java のマスターワーカー パターンに似ているようです。
Windows の C++ でこれを実装する必要があり、アプリケーションは既存の定義済みプロトコルを使用して tcp/ip ソケットを使用する必要があります。
どんな助けでも大歓迎です。