我有连接到远程服务器的 websocket 客户端。服务器每秒向我发送大量数据(每秒约 10 000 条短消息)。我如何理解我的 websocket 客户端将有时间读取所有传入数据?或者服务器可以理解 ws-client 不会读取所有数据并且会断开连接?当 ws-client 太慢时,websocket 协议将如何工作?
底层的websocket传输是TCP,这种协调不同发送和接收速率的主题称为流量控制(它是TCP层的一个特性),这个特定问题被称为“慢消费者”(在发送时很常见)通过 TCP 传输大量数据,例如金融市场数据)。
TCP 层允许在通信链路中的某些点进行缓冲,因此,如果读取器无法跟上服务器发送的字节,则可以将字节临时存储在这些缓冲区中(直到客户端能够处理它们)。读取器端和发送器端都可以有缓冲区,通常与套接字关联。然而,这些通常具有固定大小。一旦这些缓冲区已满,服务器将在下次尝试发送一些字节时面临选择:要么断开连接,要么等待(“阻塞”),直到缓冲区中有空间来发送更多字节。
所以这确实是服务器的决定,我想它很可能会断开连接(否则风险是由于套接字缓冲区已满,服务器上会消耗越来越多的内存)。