检测 socket.io 断开连接并销毁客户端事件
detect socket.io disconnect and destroy events client side
我有 html 页面由 node.js 服务器发送,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 秒后崩溃。
如果服务器不再可用,我似乎可以使用检测并销毁所有与套接字相关的事件,然后通过页面刷新或某些按钮重新连接。
也许有人可以帮我解决这个问题。
我不认为可以对错误做很多事情,它的内部 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 会因为轮询而重新连接)
- 此时没有任何侦听器被触发
因此您可以安全地重新初始化所有代码并再次正确附加侦听器。
我有 html 页面由 node.js 服务器发送,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 秒后崩溃。
如果服务器不再可用,我似乎可以使用检测并销毁所有与套接字相关的事件,然后通过页面刷新或某些按钮重新连接。
也许有人可以帮我解决这个问题。
我不认为可以对错误做很多事情,它的内部 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 会因为轮询而重新连接)
- 此时没有任何侦听器被触发
因此您可以安全地重新初始化所有代码并再次正确附加侦听器。