php - 当 websocket 客户端太慢时 websocket 将如何工作?

标签 php websocket

我有连接到远程服务器的 websocket 客户端。
服务器每秒向我发送大量数据(每秒约 10 000 条短消息)。
我如何理解我的 websocket 客户端将有时间读取所有传入数据?
或者服务器可以理解 ws-client 不会读取所有数据并且会断开连接?
当 ws-client 太慢时,websocket 协议(protocol)将如何工作?

最佳答案

底层的websocket传输是TCP,这个协调不同速率发送和接收的话题叫做流量控制(它是TCP层的一个特性),这个特定的问题被称为“消费慢”(在发送出去的时候很常见) TCP 上的大量数据,例如金融市场数据)。

TCP 层允许在通信链路中的某些点进行缓冲,因此如果阅读器无法跟上服务器正在发送的字节,则可以将字节临时存储在这些缓冲区中(直到客户端能够处理它们)。读取端和发送端都可以有缓冲区,通常与套接字相关联。然而,这些通常是固定大小的。一旦这些缓冲区已满,服务器将在下一次尝试发送一些字节时面临选择:要么断开连接,要么等待(“阻塞”)直到缓冲区中有空间发送更多字节。

所以真的是服务器决定,我猜它很可能会断开连接(否则风险是由于完整的套接字缓冲区而在服务器上消耗越来越多的内存)。

关于php - 当 websocket 客户端太慢时 websocket 将如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58706503/

相关文章:

Java Atmosphere Jersey 从 Broadcastable 返回 JSON 对象

ruby-on-rails - Heroku:Rails 5 ActiveCable配置问题。 WebSocket握手期间出错: 'Upgrade' header 丢失

php - 使用不可见的 div 检测 IFrame 内的点击

javascript - 如何读取 php cookie 值中的 jquery cookie 值?

PHP 执行和 header 重定向

javascript - 将 node-v0.10.4 用于 websocket 代理时出现错误 'invalid data'

iphone - socket 火箭测试/教程

c++ - 如何在读/写文件的同时进行异步读/写 Beast websockets?

php - PHP : got nothing with printing the array 中的 SQL 查询

PhpStorm 不会解析包含使用常量