【问题标题】:"websocket was interrupted while page is loading" on Firefox for Socket.ioFirefox for Socket.io 上的“页面加载时 websocket 被中断”
【发布时间】:2012-12-17 21:41:59
【问题描述】:
Error: The connection to <websocket> was interrupted while the page was loading.
Source File: localhost/socket.io/node_modules/socket.io-client/dist/socket.io.js
Line: 2371

我是 socket.io 的新手,我试图搜索这个,但我没有得到答案。

当我在 Firefox 上刷新页面时,Websocket 被中断。这就是服务器端等待授权客户端的原因。

代码如下: server.js

var app = require('http').createServer(handler),
  io = require('socket.io').listen(app),
  fs = require('fs')

app.listen(8080);

function handler(req, res) {
  fs.readFile(__dirname + '/index.html',
    function (err, data) {
      if (err) {
        res.writeHead(500);
        return res.end('Error loading index.html');
      }
      res.writeHead(200);
      res.end(data);
    });
}

io.sockets.on('connection', function (socket) {
  socket.emit('news', {
    hello: 'world'
  });
  socket.on('my other event', function (data) {
    //alert(JSON.stringify(data));  
    console.log(data);
  });

});

index.html

<script src="node_modules/socket.io-client/dist/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:8080');

  socket.on('news', function (data) {
    alert(JSON.stringify(data));
    console.log(data);
    socket.emit('my next event', { my: 'data' });
  });

</script>

【问题讨论】:

  • 您需要包含导致此问题的代码。否则没有意义。
  • ethrbunny 我已添加代码检查它请...帮帮我...
  • 面临几乎类似的问题。请帮忙。 stackoverflow.com/questions/16880454/…

标签: websocket socket.io


【解决方案1】:

这对您的应用程序有什么影响?我的猜测是,在控制台中看到错误并不是很好。

这里的问题是您看到 Firefox 登录此错误并且您无能为力。无法使用 try...catch 块或通过 websocket.onerror/websocket.onclose 捕获此错误。

见:How do I catch a WebSocket connection interruption?

相关:

【讨论】:

  • leggetter-->在服务器端客户端未获得授权,这就是客户端不发出任何数据的原因。但在 Internet Explorer 9 中,它获得了授权并发出数据,即使用 xhr-polling。
  • 根据您的问题,听起来您在问为什么会收到中断错误。如果这不是您要问的,请更新您的问题。
【解决方案2】:

这是因为,您没有关闭打开的 websocket。

此代码将消除此错误:

$(window).on('beforeunload', function(){
    socket.close();
});

【讨论】:

  • 我在Chrome 也遇到过这种情况。这似乎已经解决了。
  • 实际上,我认为这并没有解决问题。我也试过this,但我也没有修复它。
  • 这并没有解决我的问题。 Firefox bug 是问题所在,像这样的解决方法不适用于我的 Firefox (41) 版本。升级做到了;但不幸的是,如果您正在编写一个 web 应用程序(我猜这就是我们大多数人对 socket.io 感兴趣的原因),您无法决定您的用户使用哪个版本的 Firefox(或其他浏览器)。 :(
  • 没有为我修复,直到我发现服务器没有响应 WebSocket close 消息。现在服务器很好地确认关闭并且 Firefox (60.0) 很高兴。
  • 我在 2020 年仍然有这个问题,但仅限于 wss://
【解决方案3】:

我刚刚浏览了 Socket.IO 教程,我遇到了这个确切的问题。我尝试了发布的解决方案,但它们似乎根本不起作用。

经过一些摆弄、一些尖叫和一些橡皮鸭,我终于弄清楚了问题所在。问题是它在正确初始化套接字变量之前尝试连接到套接字。 Javascript 嘘嘘 #1。

如果你将修改你的文件以包含 jQuery,然后像这样包装你的函数:

    <script src="/socket.io/socket.io.js"></script>
    <script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
	<script>
    $(function(){
      var socket = io.connect('http://localhost:8080');

      socket.on('news', function (data) {
        alert(JSON.stringify(data));
        console.log(data);
        socket.emit('my next event', { my: 'data' });
      });	
    });
    </script>

你会取得更大的成功。

【讨论】:

  • 这对我没有任何帮助。相同的错误消息仍然会记录在控制台中。
【解决方案4】:

这似乎是 Firefox 中的一个开放错误(截至 2015-03-29):

https://bugzilla.mozilla.org/show_bug.cgi?id=712329

正如 Alexander 指出的那样,解决方法(目前)是在 beforeunload 上调用 websocket 上的 close()。

2016-04 更新:根据 Bugzilla 的说法,这将在 Firefox 48 中修复

【讨论】:

  • 此解决方法不适用于 socket.io(使用最新版本 1.3.5)
  • @LukasLiesis 我认为这与套接字服务器无关。我正在使用 PHP WebSockets 服务器
  • @Victor socket.io 用于双方 - 服务器和 客户端
  • @LukasLiesis 但这仍然与 socket.io 产品本身无关
  • 升级 Firefox 是唯一对我有用的方法。谢谢。 “解决方法”在 Firefox 41 上对我不起作用。
【解决方案5】:

一种解决方案是对断开连接事件设置超时。

         setTimeout(() => {
            $('#offlineModal').modal('show')
          }, 5000)

【讨论】:

    【解决方案6】:

    多年来,我们的基于 Undertow 的自定义网络服务器一直存在这个问题——我的问题是我的服务器没有响应套接字关闭消息。

    根据Jan Wielemaker 的评论,我检查了AbstractReceiveListener.onFullCloseMessage 的套接字关闭处理程序代码,并意识到我没有调用超级方法。添加super.close() 后,客户端上的套接字干净地关闭并且没有发出错误。

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 2020-11-09
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多