Javascript 检测socket.io断开连接并销毁客户端事件

Javascript 检测socket.io断开连接并销毁客户端事件,javascript,node.js,sockets,socket.io,connection,Javascript,Node.js,Sockets,Socket.io,Connection,我有一个由node.js服务器和socket.io组件发送的html页面,该组件连接到该服务器,如下所示: var socket = io(); 还有几个套接字事件: socket.on('server-message', function(type, content) { ... }); socket.on('server-update', function(type, content) { ... }); 问题是,在服务器停止的那一刻,我得到了客户端错误: https:

我有一个由node.js服务器和socket.io组件发送的html页面,该组件连接到该服务器,如下所示:

var socket = io();
还有几个套接字事件:

socket.on('server-message', function(type, content) {
    ...
});

socket.on('server-update', function(type, content) {
    ...
});
问题是,在服务器停止的那一刻,我得到了客户端错误:

https://example.com/socket.io/?EIO=3&transport=polling&t=LptmQyC net::ERR_CONNECTION_REFUSED
一旦服务器再次启动,它将在30秒内崩溃

看起来,若服务器不再可用,我可以使用检测,只需销毁所有套接字相关事件,然后通过页面刷新或某些按钮重新连接


也许有人可以帮我解决这个问题。

我不认为可以对这个错误做太多的处理,它的内部socket.io错误是由于服务器轮询失败造成的

为了更好地理解,一旦连接断开,socket.io将进入ajax轮询,并将尝试尽快重新连接(这意味着一旦服务器再次启动)

另一方面,重新连接后的服务器崩溃可以很容易地解决。您提供的代码仅在如何连接方面起作用,您缺少断开连接和可选重新连接的处理程序

我将向您展示如何在此代码中添加内容来管理断开连接(并防止服务器恢复后崩溃)

首先,连接到服务器:

var socket = io();
紧接着创建一个断开连接事件(顺便说一句,它也是服务器端断开连接事件的代码):

创建将销毁所有侦听器的函数:

var destroy_socket_events = function() {
    socket.off('disconnect');
    socket.off('server-message');
    socket.off('server-update');
    // add all other socket events that you have in here ...
};
现在将要发生的是:

  • 连接已建立
  • 服务器已停止
  • 客户端触发断开连接事件
  • 函数将销毁所有套接字侦听器
  • 服务器已备份
  • 客户端重新连接(由于轮询,socket.io将执行此操作)
  • 在这一点上不会触发任何侦听器
因此,您可以安全地重新初始化所有代码,并再次正确地附加侦听器

var destroy_socket_events = function() {
    socket.off('disconnect');
    socket.off('server-message');
    socket.off('server-update');
    // add all other socket events that you have in here ...
};