【问题标题】:WebSocket TCP packets clumping together?WebSocket TCP数据包聚集在一起?
【发布时间】:2012-11-02 15:15:55
【问题描述】:

关于 JavaScript 和 PHP WebSocket TCP 数据包聚集,示例如下。

由于某种原因,当在我的 VPS 上快速发送数据包,或通过指向我的 IP 地址的域访问我的本地主机时,多个数据包会聚集在一起。在本例中,我尝试每秒传输 20 个(@100byte)数据包。在服务器端,它们确实以稳定的速率发送出去,每 50 毫秒,每秒发送 20 个。 但是,当它们到达客户端时,客户端仅大约每 1/4 秒处理一次新消息。导致新数据包仅以每秒 4 个左右的速率接收...

是什么导致数据包聚集在一起?当一切都通过 localhost 时不会发生此问题。更奇怪的是,它在 iPhone 的 iOS Mobile Safari 上流畅播放,完全没有问题。但是,它在 PC Safari 上根本不起作用,(因为我没有将它设置为与旧的 Hixie-76 WebSocket 格式一起正常工作,我假设 Mobile Safari 已经在使用更新的 RFC 6455 或更新的 JavaScript编译器)我尝试了多家托管公司,每次都得到完全相同的结果。

请参阅下面的示例,托管在 InMotion 的 VPS 上: http://www.hovel.me/script/serverControl.php

(点击左侧的[连接],然后点击右侧的[查看游戏])。

当前接收到的数据包每次会跳跃大约 5 个,因为每 5 个数据包一次接收一次,每 1/4 秒一次。但是,我已经看到了可以发送恒定、快速的数据包流的示例。 是什么导致这种聚集在一起/数据包相互等待?

编辑:这一定与Nagle's algorithm 有关,它会一起收集和发送小数据包?我将努力尝试在 PHP 中绕过它。 即使在 PHP 中设置了这个 TCP_NODELAY,问题仍然存在。为什么它可以在 iPhone 上运行但不能在 PC 上运行,这仍然让我大吃一惊……
编辑:在注册表中将 TCPNoDelay 和 TcpAckFrequency 设置为 1 可以解决此问题,但我不能指望每个用户都这样做。必须有一个客户端,面包和黄油的 JavaScript 方式。

如何在不使用 node.js 的情况下复制 node.js 的“socket.setNoDelay(true)”功能?

【问题讨论】:

    标签: javascript html networking tcp websocket


    【解决方案1】:

    那是 TCP。它通过节省 IP 数据包来帮助您。一部分是Nagle算法造成的,一部分也可能是中间网络造成的。

    【讨论】:

    • 这是有道理的,但不适用于任何实时流式传输,并且 WebSocket 目前不支持 UDP,所以我现在坚持这一点。我知道有一种解决方法,但是通过 PHP 设置 TCP_NODELAY(关闭 Nagle 算法)还没有为我解决。感谢您的帮助
    【解决方案2】:

    最后,客户端无法识别 Nagle 的算法被禁用,以及它的确认频率仍设置在 200 毫秒左右,导致中间网络将以下数据包保存在缓冲区中。手动向服务器发送确认消息,每次客户端收到消息时,都会导致网络立即“唤醒”并继续处理下一个数据包,而不是将它们保存在缓冲区中。

    例如:

    conn = new WebSocket(url);
    conn.onmessage = function(evt){
        Server.send('ACKNOWLEDGE BYTES'); // Send ACK to server immediately
        dispatch('message', evt.data); //Do regular event procedures
    };
    

    此临时解决方案有效,但是这将使带宽使用量几乎翻倍,以及其他网络问题。直到我可以让客户端上的 WebSocket 正确地不“等待”服务器 ack,并且网络立即推送消息,这样才能更快地通过数据包而不会出现缓冲区阻塞问题。

    【讨论】:

      猜你喜欢
      • 2020-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 2014-12-06
      • 2019-03-28
      • 1970-01-01
      相关资源
      最近更新 更多