1

こんにちは私はtcp接続を使用してメッセージを送信/受信したいと思います。問題は、多くのメッセージを送信してレイテンシーを測定したいということです。したがって、メッセージが送信されるたびに受信したくありません。ただし、着信メッセージを時間内に処理しないと、プログラムは常に予期しない結果を受け取ります。msgを送信するプログラムをブロックせずにrecv()を処理できる方法はありますか?コメントをいただければ幸いです。

4

3 に答える 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 に答える