Language agnostic 套接字限制,因为客户端读取数据的速度不够快?
我有一个通过TCP套接字的客户机/服务器连接,服务器尽可能快地向客户机写入数据 查看我的网络活动,生产客户端接收数据的速度约为2.5 Mb/s 我编写的一个新的轻量级客户机只是读取和基准测试速率,其速率约为5.0Mb/s(这可能是服务器可以传输的最大速率)Language agnostic 套接字限制,因为客户端读取数据的速度不够快?,language-agnostic,sockets,throttling,throughput,Language Agnostic,Sockets,Throttling,Throughput,我有一个通过TCP套接字的客户机/服务器连接,服务器尽可能快地向客户机写入数据 查看我的网络活动,生产客户端接收数据的速度约为2.5 Mb/s 我编写的一个新的轻量级客户机只是读取和基准测试速率,其速率约为5.0Mb/s(这可能是服务器可以传输的最大速率) 我想知道是什么控制了这里的速率,因为客户端没有向服务器发送任何数据来告诉它任何速率限制。在TCP中,它是客户端。若服务器的TCP窗口已满,则需要等待来自客户端的更多确认。它隐藏在TCP堆栈中,但TCP引入了保证传递,这也意味着服务器发送数据的
我想知道是什么控制了这里的速率,因为客户端没有向服务器发送任何数据来告诉它任何速率限制。在TCP中,它是客户端。若服务器的TCP窗口已满,则需要等待来自客户端的更多确认。它隐藏在TCP堆栈中,但TCP引入了保证传递,这也意味着服务器发送数据的速度不能超过客户端处理数据的速度。在TCP中,它是客户端。若服务器的TCP窗口已满,则需要等待来自客户端的更多确认。它在TCP堆栈中对您隐藏,但TCP引入了保证传递,这也意味着服务器发送数据的速度不能超过客户端处理数据的速度。TCP具有流量控制,并自动进行。请在网站上阅读
由于流控制而填充管道时,服务器I/O套接字写入操作将不会完成,直到流控制解除。TCP具有流控制,并自动执行。请在网站上阅读
当由于流量控制而填充管道时,服务器I/O套接字写入操作将在流量控制解除之前完成。服务器以5.0Mb/s的速度写入数据,但如果您的客户端是此处的瓶颈,则服务器必须等待“发送缓冲区”中的数据完全发送到客户端,或者释放足够的空间来放入更多数据 正如您所说,轻量级客户端能够以5.0Mb/s的速度接收数据,那么您必须检查客户端中的接收后操作。如果您正在接收数据,然后在读取更多数据之前对其进行处理,那么这可能是瓶颈
最好是异步接收数据,一次接收完成后,让客户端套接字再次开始接收数据,同时在单独的线程池线程中处理接收到的数据。通过这种方式,您的客户端始终可以接收输入数据,服务器可以全速发送。服务器以5.0Mb/s的速度写入数据,但如果您的客户端是这里的瓶颈,则服务器必须等待“发送缓冲区”中的数据完全发送到客户端,或者释放足够的空间来放入更多数据 正如您所说,轻量级客户端能够以5.0Mb/s的速度接收数据,那么您必须检查客户端中的接收后操作。如果您正在接收数据,然后在读取更多数据之前对其进行处理,那么这可能是瓶颈 最好是异步接收数据,一次接收完成后,让客户端套接字再次开始接收数据,同时在单独的线程池线程中处理接收到的数据。通过这种方式,您的客户机始终可以接收输入数据,服务器可以全速发送数据