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

时间:2017-06-30 06:57:28

标签: javascript node.js sockets socket.io connection

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

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秒后崩溃。

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

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

1 个答案:

答案 0 :(得分:0)

我不相信可以对错误做很多事情,因为服务器轮询不成功导致内部socket.io错误。

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

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

我将向您展示如何添加此代码以管理断开连接(并在重新启动后防止服务器崩溃)。

首先连接到服务器:

var socket = io();

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

socket.on('disconnect', function() {
    destroy_socket_events();
});

创建将破坏所有侦听器的函数:

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将因为轮询而执行此操作)
  • 此时没有触发任何听众

因此,您可以安全地重新初始化所有代码并再次正确连接侦听器。