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 消息限制吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 IP 地址连接 Firefox 扩展中的 websocket 客户端