Firefox有WebSocket消息限制吗?



我最近一直在玩WebSockets,作为我的最新游戏项目。当我将键盘控制器连接到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-4.0.1与noVNC与WebSockets手动启用,它的工作没有任何消息丢失或延迟(在任何方向)。noVNC在两个方向上都发送了大量的流量,任何消息丢失都会导致协议失败,这是我在任何版本的firefox 4 (alpha, beta, 4.0, 4.0.1)中从未见过的,任何延迟都是非常明显的,因为noVNC是高度交互的。

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

相关内容

  • 没有找到相关文章

最新更新