socket.io/node.js检测服务器是否已关闭

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socket.io/node.js检测服务器是否已关闭相关的知识,希望对你有一定的参考价值。

我可以在客户端做些什么来检测socket.io websocket是不可用的吗?有点像:

  • 服务器按常规启动
  • 客户连接
  • 消息在服务器和客户端之间来回发送
  • 服务器关闭(不再可用)
  • 警告连接的客户端服务器不可用

我试图在客户端添加'error'和'connect_failed'选项,但没有任何运气,那些根本没有触发。任何人的想法我怎么能做到这一点?

答案

disconnect事件是你想听的。

var socket = io.connect();

socket.on('connect', function () {
  alert('Socket is connected.');
});

socket.on('disconnect', function () {
  alert('Socket is disconnected.');
});
另一答案

如果您希望能够检测到客户端无法连接到服务器,请尝试使用connect_error。这适用于socket.io-1.3.5.js。我在https://stackoverflow.com/a/28893421/2262092找到了这个。

这是我的代码片段:

var socket = io.connect('http://<ip>:<port>', {
    reconnection: false
});
socket.on('connect_error', function() {
    console.log('Failed to connect to server');
});
另一答案

在我开发过程中遇到这个bug,并注意到每次重置服务器时我的事件调用都会加倍,因为我的套接字重新连接。结果是对我有用的解决方案,这不是重复连接就是这个

一旦socket = eo.connect();

socket.on('connect',function(){

console.log('用户连接!');

});

socket.on('message',function(message){

的console.log(消息);

});

(由KasperTidemann在https://github.com/socketio/socket.io/issues/430发现)

事实证明,这是因为我把'message'监听器放在'connect'函数中。将它放在听众之外,解决了这个问题。

欢迎来到Kasper Tidemann,无论您身在何处。

继续!!

另一答案

connect_error不适合我(使用Apache ProxyPass并返回503)。

如果需要检测初始连接失败,可以执行此操作。

var socket;
try {
    socket = io();
}
catch(e) {
    window.location = "nodeServerDown.php";
}

服务器关闭时,将用户重定向到自定义错误页面。

如果您需要在连接一次后处理断开连接。

你做这个:

socket.on('disconnect', function() {
    //whatever your disconnect logic is
});

以上是关于socket.io/node.js检测服务器是否已关闭的主要内容,如果未能解决你的问题,请参考以下文章

Node.js:socket.io 关闭客户端连接

本地网络上的 Socket.io/node.js?

在重新连接、socket.io、node.js 时重用套接字 id

facebook 和 socket.io node.js

Node.js、Socket.io、Redis pub/sub 大容量、低延迟困难

格式化消息以从 python 客户端发送到 socket.io node.js 服务器