TCP 経由で通信するクライアント プログラムとサーバー プログラムがあります。代わりに POSIX メッセージ キューを使用しようとしています (もちろん、クライアントとサーバーが同じマシン上にある場合)。私の希望は、パフォーマンスが向上することです (具体的には、待ち時間の短縮による)。
私はそのほとんどを解決しましたが、「接続」を確立する方法が 1 つあります。サーバーは複数のクライアントからの接続を同時に受け入れるため、次のように TCP 接続確立プロセスをエミュレートしたくなります。
- サーバーは既知の名前でキューを開き、そこから継続的に読み取ります (
select(2)
TCP と同様に使用できます)。 - クライアントは 3 つのキューを開きます。そのうちの 2 つは任意の名前 (衝突を避けるための PID などの一意性を含む) で、もう 1 つはサーバーで使用される既知の名前です。
- クライアントは、クライアントのキュー名を含む「接続」メッセージをサーバーのキューに送信します (1 つはクライアントからサーバーへのトラフィック用に指定され、もう 1 つはその逆用に指定されます)。
- サーバーは、クライアントの接続メッセージで指定されたキューを開き、クライアントからサーバーへのキューから読み取り (選択) を開始します。
- クライアントは、既知の名前でサーバー キューを閉じます。双方向通信は、クライアントによって指定された 2 つのキュー (各方向に 1 つ) を使用して続行されます。
おそらく、この方式が一般的な TCP 方式に似ていることがお分かりいただけると思いますが、これは偶然ではありません。ただし、知りたいのは:
- それを行うためのより良い方法を考えることはできますか?
- 私の方法に潜在的な問題はありますか?
- 同じマシンで TCP の代わりにメッセージ キューを使用すると実際にパフォーマンス (レイテンシ) が向上する可能性など、他に何か考えはありますか?
以前に POSIX メッセージ キューを使用したことがないことに注意してください (以前は IBM WebSphere MQ を使用していましたが、それはかなり異なります)。プラットフォームは Linux です。