1

TCP ソケットを介したクライアント/サーバー接続があり、サーバーはできるだけ速くクライアントに書き込みます。

ネットワーク アクティビティを見ると、本番クライアントは約 2.5 Mb/s でデータを受信して​​います。

速度を読み取ってベンチマークするために作成した新しい軽量クライアントの速度は約 5.0Mb/s です (これはおそらく、サーバーが送信できる最大速度に近い速度です)。

クライアントはサーバーにデータを送信してレート制限について通知しないため、ここでレートを制御するものは何なのか疑問に思っていました。

4

3 に答える 3

6

TCP ではクライアントです。サーバーの TCP ウィンドウがいっぱいの場合、クライアントからさらに ACK が来るまで待つ必要があります。これは TCP スタック内に隠されていますが、TCP では配信の保証が導入されています。これは、サーバーがクライアントがデータを処理する速度よりも速くデータを送信できないことも意味します。

于 2009-09-08T17:00:51.147 に答える
3

TCP にはフロー制御があり、それは自動的に行われます。http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Flow_controlでそれについて読んでください

フロー制御が原因でパイプがいっぱいになると、サーバー I/O ソケットの書き込み操作は、フロー制御が解除されるまで完了しません。

于 2009-09-08T17:04:37.643 に答える
0

サーバーは 5.0Mb/s でデータを書き込んでいますが、クライアントがここでボトルネックになっている場合、サーバーは「送信済みバッファー」内のデータがクライアントに完全に送信されるまで待機する必要があります。

軽量クライアントは 5.0Mb/s で受信できたとおっしゃっていましたが、クライアントでの受信後の動作を確認する必要があります。データを受信し、それを処理してからさらにデータを読み取る場合、これがボトルネックである可能性があります。

非同期でデータを受信することをお勧めします。1 つの受信が完了するとすぐに、クライアント ソケットにデータの受信を再開するように要求し、受信したデータを別のスレッド プール スレッドで処理します。このようにして、クライアントは常に着信データを受信でき、サーバーはそれを全速力で送信できます。

于 2009-10-06T06:35:13.510 に答える