Firefox是否有WebSocket消息限制?

时间:2011-05-03 18:02:26

标签: javascript firefox websocket

我最近一直在玩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>

请注意,如果我反复按“发送”按钮或只按“发送两个”,则无关紧要。

1 个答案:

答案 0 :(得分:2)

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

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

相关问题