12

我可以在客户端做些什么来检测 socket.io websocket 不可用吗?类似于以下内容:

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

我试图在客户端添加 'error' 和 'connect_failed' 选项,但没有任何运气,它们根本没有触发。任何人的任何想法如何实现这一目标?

4

4 回答 4

11

disconnect事件是您想要收听的。

var socket = io.connect();

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

socket.on('disconnect', function () {
  alert('Socket is disconnected.');
});
于 2013-05-09T09:08:09.500 回答
11

如果您希望能够检测到客户端无法连接到服务器,请尝试使用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');
});
于 2015-07-23T23:39:14.477 回答
0

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

var socket = io.connect();

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

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

});

socket.on('消息',函数(消息){

控制台.log(消息);

});

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

事实证明,这是因为我将“消息”侦听器放在“连接”函数中。把它放在听众外面,解决了这个问题。

无论您身在何处,都为 Kasper Tidemann 干杯。

继续!!

于 2016-07-16T14:58:33.930 回答
0

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
});
于 2018-04-20T19:48:41.003 回答