2012-01-27 11 views
3

サーバはいくつかのソケット(10-20)からの着信データを聞く必要があります。いくつかの初期化の後、それらのソケットは作成され、変更されません(つまり、新しいソケットは受け入れられず、サーバの存続期間中に閉じることはできません)。複数のソケットを聞く:選択とマルチスレッドの選択

1つのオプションはすべてのソケットでselect()です。次に、ソケットごとに受信データを処理します(つまり、適切な処理機能への経路)。

もう1つの方法は、ソケットごとに1つのスレッドを開き、各スレッドにrecv()を入力させて処理させることです。

(最初のオプションはタイムアウトを設定する利点がありますが、この場合は問題ありません。すべてのソケットはかなりアクティブなので です)。

次のように仮定します:Windowsサーバーは、20MB(20スレッド)が問題にならないような十分なメモリを備えています。

+4

私は10-20のソケットでは、各ソケットにスレッドを割り当てることは問題ではなく、 'recv()'を使って処理するのは、通常は少し早くプログラムすることです(afaik)。 http://www.gamedev.net/topic/304030-async-sockets-or-select-with-threads/ –

答えて

2

あなたのアプリにはそれほど多くはありません。一般的に、ソケットごとのスレッドを使用する方が、シンプルな構造であり、状態を維持する方が簡単であるため、非同期アプローチよりも簡単です。

+0

また、ネットワークの速度はこの選択の影響を受けません。これは、CPUとメモリの効率についての選択肢です。 – usr