こんにちは私はtcp接続を使用してメッセージを送信/受信したいと思います。問題は、多くのメッセージを送信してレイテンシーを測定したいということです。したがって、メッセージが送信されるたびに受信したくありません。ただし、着信メッセージを時間内に処理しないと、プログラムは常に予期しない結果を受け取ります。msgを送信するプログラムをブロックせずにrecv()を処理できる方法はありますか?コメントをいただければ幸いです。
質問する
177 次
3 に答える
2
TCPは必然的に独自のレイテンシーを導入するため、TCPを使用してレイテンシーを測定することはおそらく最適なアイデアではありません( Nagleのアルゴリズムを参照)。TCPはバイトストリームとして意図されており、「メッセージ」について明確に定義された概念さえありません。
ソケットを非ブロッキングに設定できます。これにより、recv()
データがない場合はすぐに戻ります。ポーリングによってCPUを浪費したくない場合は、代わりselect()
に、ソケットに読み取り可能なデータがあるかどうかを検出するために使用できます。
于 2010-11-22T10:36:15.613 に答える
0
select()
着信データが利用可能かどうかをテストするために使用できます。
于 2010-11-22T10:33:05.597 に答える
0
ここで言及されていないオプションの1つは、受信に槍状のスレッドを使用することです。そうすれば、他のスレッドの送信ロジックに(多くの)干渉することなく、単純なダムブロッキングを待機させることができます。
于 2010-11-22T11:06:47.647 に答える