Firefox 有 WebSocket 消息限制吗?

Posted

技术标签:

【中文标题】Firefox 有 WebSocket 消息限制吗?【英文标题】:Does Firefox have a WebSocket message limit? 【发布时间】:2011-05-03 18:02:26 【问题描述】:

我最近一直在玩 WebSockets,这是我最近的游戏项目。当我将键盘控制器连接到 WebSocket 客户端时,我注意到消息略有延迟,甚至消息丢失,WebSocket 客户端只是将按键/释放发送到服务器。

因此,如果我快速连续发送多条消息,Firefox 似乎会在每条消息之间暂停一段时间,如果消息太多甚至会丢弃它们。

相同的代码在 Chrome 中运行良好,没有延迟或消息丢失。这是故意的吗?

编辑:这是我遇到问题的简化页面:

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>WebSocket Test</title>
    <meta charset="utf-8"/>
    <script>
      socket = new WebSocket("ws://example.com/websockettest");
      socket.onopen = function()  message("[[ Connected ]]"); 
      socket.onclose = function()  message("[[ Disconnected ]]"); 
      socket.onmessage = function(e)  message(e.data); 
      function message(msg) 
        document.getElementById("messages").textContent += msg + "\n";
      
    </script>
  </head>
  <body>
    <input type="button" value="Send" onclick="socket.send('Hey!');"/>
    <input type="button" value="Send two" onclick="socket.send('Hey once!');
                                                   socket.send('Hey twice.');"/>
    <pre id="messages"></pre>
  </body>
</html>

请注意,我重复点击“发送”按钮或只按“发送两个”都没有关系。

【问题讨论】:

什么版本的火狐?什么服务器?您正在使用什么客户端库(如果有,如果没有发布一些代码)?您是在 firefox 中手动启用 websockets 支持还是使用 web-socket-js? 我使用的是 Firefox 4.0.1,启用了 WebSockets,SuperWebSocket 作为服务器的基础。大多数代码位于服务器端并通过套接字发送到客户端。这是一个简单的更新循环,每秒调用 30 次,并在此期间发送 keychanges。我看看能不能弄个简单的测试页。 【参考方案1】:

我已经使用noVNC 手动启用了 WebSockets 测试了 firefox-4.0.1,它可以在没有任何消息丢失或延迟的情况下工作(在任一方向上)。 noVNC 双向发送大量流量,任何消息丢失都会导致协议失败,这是我在任何版本的 firefox 4(alpha、beta、4.0、4.0.1)中从未见过的,并且任何延迟都非常明显,因为 noVNC 具有高度交互性.

您的客户端代码看起来不错,所以我怀疑 firefox 在网络上的作用方式不同会触发 SuperWebSocket 或您的 SuperWebSocket 代码中的错误。听起来你有一个相当简单的服务器,你可以用它来重现它。我建议使用不同的框架实现等效的简单测试服务器,例如 Socket.IO(如果您可以访问 Linux 系统)或 Jetty WebSockets servelet。如果它与其中一个一起重现,那么您可能在 Firefox 的 WebSockets 客户端中发现了一个错误,您应该向 Mozilla 提交一个错误。如果它没有在那里重现,那么它可能是 SuperWebSocket 或您使用它的错误。

【讨论】:

某些 Firefox 配置会导致这种情况吗?除了启用 WebSockets 之外,我没有改变任何东西。我只是好奇为什么这只发生在 Firefox 而不是 Chrome 上。那不能只是服务器中的错误..?好吧,我现在正在写自己的,所以我还不能测试它。 这可能是一个错误,尽管我怀疑它在服务器库中(或您使用它的方式),因为 Firefox 支持将有更多的测试(包括我自己的) .但是,firefox 和 Chrome 不会有相同的网络时间、碎片特征等,因此一个可能会触发服务器中的错误,而另一个则不会。如果 SuperWebSocket 的开发人员主要针对 Chrome 而不是 firefox 进行测试,这尤其可能。

以上是关于Firefox 有 WebSocket 消息限制吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何限制龙卷风 websocket 消息大小

Websocket 连接不会在 FireFox 中关闭

websocket链接数限制

如何通过 IP 地址连接 Firefox 扩展中的 websocket 客户端

使用 Firefox Quantum 检查 Websocket 帧

Netty:如何限制每秒 websocket 通道消息?