私はクライアント - 単一のクライアントとの永続的な接続を備えた 10 台のサーバーを備えたサーバー アーキテクチャを持っています。ソフトウェアは C++ で記述されており、boost asio ライブラリを使用しています。すべての接続は初期化フェーズで作成され、実行中は常に開いています。クライアントが何らかの情報を必要とする場合、すべてのサーバーにリクエストを送信します。各サーバーは、必要な情報とクライアントへの回答を見つけます。
クライアントには、すべてのソケットからのメッセージの受信を担当する 1 つのスレッドがあります。特に、io_services各ソケットから 1 つと async_read を 1 つだけ使用します。
メッセージがソケットの 1 つに到着すると、async_readメッセージのヘッダーである最初の N ビットをread読み取り、(同期) を使用して残りのメッセージを読み取る関数を呼び出します。サーバー側には、ヘッダーと残りのメッセージが単一write(同期) で送信されます。
その後、アーキテクチャは正常に動作しますが、同期readに通常よりも時間がかかる場合があることに気付きました (~0.24 秒)。が既にヘッダーを読み取ったときに同期readが呼び出されるため、理論的にはデータを読み取る準備ができています。async_readまた、サーバーを 10 台ではなく 1 台だけ使用すると、この問題は発生しないことがわかりました。さらに、この問題はメッセージの次元のために発生していないことに気付きました。
io_serviceが10 個すべてを処理できないために問題が発生する可能性はありasync_readますか? 特に、すべてのソケットが同時にメッセージを受信するとio_service、キューを管理する時間が失われ、同期が遅くなる可能性がありますreadか?
プロジェクトから抽出するのが難しいため、コードを投稿していませんが、私の説明が理解できない場合は、例を書くことができます。
ありがとうございました。