1

この質問が他の同様の質問と重複している場合は、お詫び申し上げます。

私は小さなサーバーを設定しています-負荷が非常に低いいくつかのシステムにクライアントを設定しています(一度に10〜15を超えない接続で、非常に低いデータ転送も実行します)。ブロッキングソケットと非ブロッキングソケットのどちらを使用すべきか疑問に思いましたか?

サーバー側ではselectを使用しており、それが戻ったらfdsを読み取ります。ここで、selectで非ブロッキングソケットを使用する場合、selectに続く「recv」の利点は何ですか。selectが、読むことができるものはあるが、実際には何も読むことができないと言っている状況はありますか?

ありがとう

4

2 に答える 2

4

ブロッキングソケットと非ブロッキングソケットのどちらを使用すべきか疑問に思いましたか?

このような低負荷の場合、ブロッキングソケットを使用し、各ソケットに専用のスレッドを割り当てて実行します。select()マルチスレッドプログラミングに慣れていない場合は、ブロッキングソケットと非ブロッキングソケットの両方で機能します。

selectが、読むことができるものはあるが、実際には何も読むことができないと言っている状況はありますか?

はい。グレースフルディスコネクトでselect()は、ソケットが読み取り可能であると報告し、recv()そのソケットで0を返します。

于 2013-02-04T20:02:16.227 に答える
0

@Remyに同意します。

ただし、スレッドは使用しないことをお勧めします。少なくともそもそも。私がこれを提案する理由は、あなたがこの種のことにはちょっと慣れていないように思え、スレッドは基本的な通信を稼働させるために必要な以上の頭痛を追加するかもしれないからです。

于 2013-02-04T20:07:55.567 に答える