【发布时间】:2016-02-08 22:55:07
【问题描述】:
客户端是否也需要禁用 Nagle 算法?如果是这种情况,我还没有找到单独通过 JavaScript 禁用 Nagle 算法的方法。
我正在尝试通过 websocket 从托管在 Raspbian OS 上的 PHP CLI 服务器传输数据(也托管在 Windows 7 和 Ubuntu 上,结果相同)。此服务器已成功创建套接字并接受多个连接,并已设置 TCP_NODELAY 标志(仅使用 socket_get_option 验证)。
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)
socket_set_option($sock, SOL_SOCKET, TCP_NODELAY, 1);
在大多数平台上,无论是否设置了此 TCP_NODELAY 标志,数据都会流式传输而不会聚集。但是,在 Windows 7 Chrome 和 Firefox 上,数据以块的形式到达(有 0.2 秒的延迟)。在 Windows 8、Linux、iOS 和 Windows 7 的 Internet Explorer 11 上:我根本看不到这个问题。
http://www.13willows.com/hovelme/script/serverControl.php 这是测试网站,单击“连接”,然后单击“查看游戏”,您应该会看到当前数据包每 50 毫秒从 1 稳步递增到 20。但是,在某些客户端上,它大约每 200 毫秒一次跳跃 4 次。
有什么想法可以阻止这种情况吗?使用 node.js / socket.io 会修复这样的问题,并且仍然允许我从用户的浏览器运行代码吗?
【问题讨论】:
标签: javascript php node.js socket.io nagle