套接字限制因为客户端没有足够快地读取数据?

时间:2009-09-08 16:56:50

标签: language-agnostic sockets throttling throughput

我通过TCP套接字建立了客户端/服务器连接,服务器尽可能快地写入客户端。

查看我的网络活动,生产客户端以大约2.5 Mb / s的速度接收数据。

我写的一个新的轻量级客户端只是读取和评估速率,速率约为5.0Mb / s(这可能是服务器可以传输的最大速度)。

我想知道这里的费率是什么,因为客户端没有向服务器发送数据来告诉它任何速率限制。

3 个答案:

答案 0 :(得分:6)

在TCP中,它是客户端。如果服务器的TCP窗口已满 - 它需要等待来自客户端的更多ACK。它在TCP堆栈中对您隐藏,但TCP引入了有保证的传递,这也意味着服务器无法比客户端处理数据的速度更快地发送数据。

答案 1 :(得分:3)

TCP具有流量控制,它会自动发生。在http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Flow_control

了解相关信息

当流量控制导致管道填满时,服务器I / O套接字写入操作将无法完成,直到流量控制被重新存储。

答案 2 :(得分:0)

服务器以5.0Mb / s的速度写入数据,但是如果你的客户端是这里的瓶颈,那么服务器必须等待“Sent Buffer”中的数据完全发送到客户端,或者释放足够的空间以放入更多数据

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

最好以异步方式接收数据,并且只要一个接收完成,就要求客户端套接字再次开始接收数据,同时在单独的线程池线程中处理接收到的数据。这样,您的客户端始终可以接收数据,服务器可以全速发送。