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 的速度写入数据,但如果您的客户端是这里的瓶颈,那么服务器必须等待“Sent Buffer”中的数据完全发送到客户端,或者释放足够的空间来放入更多数据。

正如您所说的轻量级客户端能够以 5.0Mb/s 的速度接收,那么您必须检查客户端中的接收后操作。如果您正在接收数据然后在读取更多数据之前对其进行处理,那么这可能是瓶颈。

最好异步接收数据,一旦接收完成,就要求客户端套接字重新开始接收数据,同时在单独的线程池线程中处理接收到的数据。这样,您的客户端始终可以接收传入数据,而服务器可以全速发送。

于 2009-10-06T06:35:13.510 回答