插座节流因为客户端不读数据速度不够快?
-
21-09-2019 - |
题
我有超过一个TCP套接字到客户端一样快,它可以在客户端/服务器连接,与服务器写入。
寻找在我的网络活动,生产客户端在大约2.5 MB接收数据/秒。
一个新的轻量级客户端,我写的只是阅读和基准率,拥有约5.0Mb /秒(这大概是最大速度的服务器可以传输)。
率我想知道这里支配率,因为客户端不发送数据到服务器,告诉它任何速率限制。
解决方案
在TCP它是客户端。如果服务器的TCP窗口充满了 - 它需要等到从客户端多个ACK来了。它是不可见的TCP堆栈的内部,但是TCP介绍有保证的递送,这也意味着该服务器不能发送数据的速度比在该客户端处理它们率。
其他提示
TCP具有流量控制和它自动发生。阅读关于它在 http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Flow_control
当管填充由于流量控制,服务器I / O插座的写操作将不会完成,直到流量控制被releaved。
服务器在5.0Mb写入数据/ S,但如果你的客户是这里的瓶颈,那么服务器在“已发送缓冲区”的数据之前等待完全发送到客户端,或足够的空间被释放,以投入更多数据
至于你说的是重量轻客户能够接受在5.0Mb / s,则这将是后接收操作在客户端,你必须检查。如果是接收的数据,然后对其进行处理你读更多的数据之前,那么这可能是瓶颈。
这是更好地异步接收数据,并尽快一个接收完成后,要求客户套接字重新开始接收数据,同时您处理在一个单独的线程池线程接收到的数据。这样,你的客户永远是可用于接收进来的数据,并且服务器可以全速发送。
不隶属于 StackOverflow