Javascript 检测socket.io断开连接并销毁客户端事件
我有一个由node.js服务器和socket.io组件发送的html页面,该组件连接到该服务器,如下所示: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:
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 ...
};