17

简单场景:

  1. socket = io.connect(...)客户端使用 socket.io ( )连接到服务器
  2. 服务器崩溃
  3. 客户端尝试重新连接
  4. 用户告诉客户端断开连接 ( socket.disconnect())
  5. 服务器启动
  6. 客户端重新连接

似乎一旦 socket.io 开始尝试重新连接,它就不能再停止了。我想要第 4 步来防止第 6 步发生,但事实并非如此。我必须打电话给什么?

4

6 回答 6

31

您可能想自己处理重新连接。

// Disables the automatic reconnection
var socket = io.connect('http://server.com', {
    reconnection: false
});

// Reconnects on disconnection
socket.on('disconnect', function(){
    socket.connect(callback);
});

注意:使用旧版本reconnect而不是reconnection.

于 2012-06-29T18:19:01.543 回答
2

我认为您需要配置 socket.io client的不是reconnect将属性设置reconnectfalse

我创建了一个小服务器(server.js)来测试这个:

var io = require('socket.io').listen(8888);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('my other event', function (data) {
    console.log(data);
  });
});

然后我创建了这个test.js来测试它不会重新连接

var client = require('socket.io-client'),
    socket = client.connect('http://localhost:8888', {
        'reconnect': false
    });

socket.on('connect', function () {
    socket.on('news', function (data) {
        console.log(data);
        socket.emit('my other event', { my: 'data' });
    });
});

为了test.js工作,您需要socket.io-clientnpm发布npm install socket.io-client或添加socket.io-client(dev-)dependency到您的package.json.

当我在运行时停止server.js时会立即返回,我相信这是您想要的结果。当我设置为客户端时,将尝试重新连接到服务器,这不是所需的行为test.jstest.jsreconnecttrue

于 2012-06-23T01:11:38.870 回答
0

在新的 socket.io 1.1.x 中,您可以执行以下操作:

var manager = io.Manager('http://localhost:9823', { autoConnect: false });

这是博客链接

于 2014-09-07T21:30:30.650 回答
0

试试下面的代码:

self.socket?.manager?.reconnects = false
于 2018-08-12T04:46:13.847 回答
0

不过,这对我来说效果很好,它会在完全停止之前再尝试一次。

socket.io-client": "2.2.0"

this.socket.io.reconnectionAttempts(0);

于 2020-04-17T10:42:22.830 回答
-2

你可以打电话socket.disconnect(),然后它会停止尝试重新连接。

于 2019-04-19T07:44:21.430 回答