我有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秒后崩溃。
看起来我可以使用检测,如果服务器不再可用,只是销毁所有与套接字相关的事件,然后通过页面刷新或某个按钮重新连接。
也许有人可以帮我解决这个问题。
答案 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 ...
};
现在将要发生的事情是:
因此,您可以安全地重新初始化所有代码并再次正确连接侦听器。