サーバーとクライアントの間に双方向 (全二重) リンク (同時にデータを送受信できる場所) が必要です。私が行った調査の結果、最善の方法は、クライアントとサーバー間のソケットをそれぞれ実装する 2 つのスレッドを持つことであることがわかりました。これにアプローチする方法を知っている人はいますか、またはこれを行う同様のコードを見たことがありますか? 私はこの分野に本当に慣れていないので、どんな提案も本当に歓迎します...
2667 次
1 に答える
1
同時送受信を行う能力を制限する高レベルのトランスポート プロトコルを使用していない限り、全二重通信に 2 つのソケットは必要ありません。
このようなトランスポート制限の一例は、サーバーが実際に HTTP サーバーである場合です。次に、HTTP を使用したアプリケーションとの双方向通信が必要な場合は、GET を実行する 1 つの接続と、PUT を実行する別の接続が必要になる場合があります。
それ以外の場合、クライアントは同じソケットに対して同時に読み取りと書き込みを行うことができます。一方が読み取り用で、もう一方が書き込み用の 2 つのスレッドを作成できますが、それぞれが同じソケットで動作します。
サーバーは同様の戦略 (接続ごとにスレッドのペア) を使用できますが、サーバーが多数の接続 (たとえば数千) を処理している場合は、スケーラビリティの問題に直面する可能性があります。epoll()
通常、これは、やなどの高性能接続マルチプレクサを備えたノンブロッキング I/O を使用して解決さkqueue()
れ、接続処理の負荷を分散するコアと同じ数のスレッドのみを作成します。非常にスケーラブルなサーバーを実装する方法に関する優れた情報源については、The C10K Problemを参照してください。
于 2013-07-12T22:00:21.950 に答える