2

UDP経由で多数のクライアントに接続するc ++のサーバーで作業しています。特定のソケットからの着信データグラムを処理するには、スレッド プールが最適であると判断しました。

私の質問は、スケーラビリティの観点から、各ワーカー スレッドが sendto を呼び出せるようにするのが最善でしょうか? それらは同じソケットで行うべきですか、それとも別のソケットが望ましいでしょうか? すべてのトラフィックは 1 つのポートを通過します。

私が準備したものから、recvfrom と sendto への呼び出しはアトミックであり、ソケットをリッスンするための専用スレッドが既にあるようです (現在は非ブロックであり、ソケットを読み取る準備ができているかどうかを判断するために呼び出しを選択します) )。

私が自分の意志で行くとしたら、おそらく別のソケットを使用して送信し、複数のスレッドを使用して送信するでしょう(すべてのアクションが有効であると仮定します)。

これがどれほど役立つかはわかりませんが、これは一般的な考え方です。 ここに画像の説明を入力

4

1 に答える 1

1

複数のスレッドに複数の UDP ソケットを使用する利点はありません。そのため、それらが非ブロックであり、単一のバインドされた UDP ソケットを使用すると、指定された要件によりよくマップされます。これは、ステートレスなデータグラム指向のプロトコルを実装する楽しみの 1 つです。

これはあなたの質問に対処/確認しますか?

于 2012-11-24T00:22:46.287 に答える