socket.io断开然后重新连接

时间:2013-11-08 22:56:30

标签: socket.io

我正在尝试断开客户端,然后重新连接它。

我可以使用socket.disconnect();

断开客户端与服务器端的连接

但我无法再次连接它,有没有办法做到这一点?

问题是我在客户端connect callback中有一个特定的处理方法,如果我尝试在断开事件后连接客户端,它永远不会触发回调,我不明白为什么。

这是一个明显的例子:

客户端

var Socket = io.connect('http://127.0.0.1:3000');

function bind_socket(Socket) {
    Socket.on('connect', function()  {
        console.log('Socket connected !');
    });

    Socket.on('event', function(data)  {
        console.log('Receive event: '+data);
    });

    Socket.on('disconnect', function()  {
        console.log('Socket disconnected !');

        var Socket = io.connect('http://127.0.0.1:3000'); //Doesn't fire the "connect" callback
        bind_socket(Socket);
        Socket.emit('event', 3);
    });
}

bind_socket(Socket);
Socket.emit('event', 1);

服务器

var io = require('socket.io').listen(3000);
io.on('connection', function(socket) {
    console.log('socket '+socket.id+' connect');

    socket.on('event', function(data) {
        console.log('Receive Event: '+data);
        socket.disconnect();
        this.emit('event', 2);
    });

    socket.on('disconnect', function() {
        console.log('socket '+this.id+' disconnect');
    });
});

3 个答案:

答案 0 :(得分:7)

答案是使用Socket.socket.reconnect();

(其中Socket是连接事件返回的“原始”套接字。)

答案 1 :(得分:6)

如果您正在使用Socket.io 1.0,请尝试使用套接字上的io管理器执行disconnect()reconnect()

请参阅Socket.io - Manual reconnect after client-side disconnect

上的示例

答案 2 :(得分:0)

如果仅使用套接字2.x socket.connect(),那么在2.x

中谈论reconnect()的其他答案是不正确的