从重新连接停止socket.io

时间:2012-06-18 19:17:11

标签: socket.io

简单方案:

  1. 客户端使用socket.io(socket = io.connect(...)
  2. 连接到服务器
  3. 服务器崩溃
  4. 客户端尝试重新连接
  5. 用户告诉客户断开连接(socket.disconnect()
  6. 服务器启动
  7. 客户重新连接
  8. 似乎一旦socket.io开始尝试重新连接,它就不能再停止了。我希望第4步阻止第6步发生,但事实并非如此。我该怎么称呼呢?

6 个答案:

答案 0 :(得分:25)

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

// 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

答案 1 :(得分:2)

我认为您需要的是configure socket.io client而不是reconnect将属性reconnect设置为false

我创建了一个小服务器(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-client npm发布npm install socket.io-client或添加socket.io-client(dev - )dependency到你的package.json

server.js正在运行时test.js停止test.js reconnect将立即返回,我认为这是您想要的结果。当我将true设置为{{1}}时,客户端将尝试重新连接到服务器,这不是所需的行为

答案 2 :(得分:0)

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

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

这是blog link

答案 3 :(得分:0)

尝试以下代码:

self.socket?.manager?.reconnects = false

答案 4 :(得分:0)

尽管这对我很有用,但在完全停止之前又进行了一次尝试。

socket.io-client”:“ 2.2.0”

this.socket.io.reconnectionAttempts(0);

答案 5 :(得分:-1)

您只需拨打socket.disconnect(),它就会停止尝试重新连接。