私はクライアント - 単一のクライアントとの永続的な接続を備えた 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
か?
プロジェクトから抽出するのが難しいため、コードを投稿していませんが、私の説明が理解できない場合は、例を書くことができます。
ありがとうございました。