58
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);
  });

});

索引.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>
4

6 回答 6

49

发生这种情况是因为,您没有关闭打开的 websocket。

此代码将删除此错误:

$(window).on('beforeunload', function(){
    socket.close();
});
于 2014-05-21T13:15:00.193 回答
17

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

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

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

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

于 2015-03-29T13:13:13.050 回答
4

我刚刚浏览了 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>

你会取得更大的成功。

于 2015-02-11T09:56:07.073 回答
1

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

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

请参阅:如何捕获 WebSocket 连接中断?

有关的:

于 2013-01-03T17:58:38.577 回答
1

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

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

于 2020-06-30T16:16:30.193 回答
-6

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

         setTimeout(() => {
            $('#offlineModal').modal('show')
          }, 5000)
于 2019-02-23T02:27:41.140 回答