有关的JavaScript和PHP的WebSocket TCP包结块,以下面的例子。
出于某种原因,在我的VPS快速发送数据包时,或通过我的IP地址指向一个域名访问我的本地主机,多个数据包会聚集在一起。 我想流,在这个例子中,20(@ 100byte)每秒数据包。 在服务器端,他们确实正在以稳定的速率发送出去,正好每50ms,使得每秒20次。 然而,当他们到达了客户端,客户端只处理一秒钟内每1/4的新消息。 仅造成以4速度每秒左右接收新的数据包...
是什么原因造成的数据包的这个聚集在一起? 这个问题确实在通过本地主机一切都不会发生。 什么是离奇的是,它在所有流顺利在iPhone上的iOS移动Safari浏览器,没有问题。 但是,它并没有在所有PC上的Safari浏览器工作,(因为我没有将此设为与老Hixie-76的WebSocket格式正常工作,我假设移动Safari浏览器已经在使用较新的RFC 6455或更高版本的JavaScript编译器)我每次都尝试了多个托管公司,用同样的结果。
看下面的例子中,托管在了InMotion的VPS: http://www.hovel.me/script/serverControl.php
(点击左边右边,然后按[查看游戏] [连接])。
接收的约5每次会跳,因为每个5个分组被接收一次当前分组,第二的每1/4日。 不过,我已经看到了可以发送数据包的恒定,快速流的例子。 是什么原因导致这种聚集在一起/包等待对方?
编辑 :这必须是与Nagle算法 ,它收集和小包一起发送? 我会向试图在PHP绕过这方面的工作。 即使有这种TCP_NODELAY在PHP设置,问题仍然有效。 为什么它的工作原理上的iPhone,但不是PC仍是扔我了...
编辑 :在注册表中设置TCPNoDelay和的TcpAckFrequency 1修正这一问题,但我不能指望每一位用户这样做。 必须有一个客户端,面包黄油JavaScript的方式。
怎样才可以有功能复制的node.js'‘ socket.setNoDelay(真) ’,而不使用Node.js的?