4

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

我可以使用断开客户端与服务器端的连接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');
    });
});
4

4 回答 4

6

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

Socket连接事件返回的“原始”套接字在哪里)。

于 2013-11-09T11:55:28.293 回答
6

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

请参阅Socket.io 上的示例 - 客户端断开连接后手动重新连接

于 2014-07-11T14:44:55.820 回答
3

如果使用套接字 2.x 只是socket.connect()其他答案reconnect()在 2.x 中是不正确的

于 2018-06-07T09:38:14.363 回答
0

尝试使用

socket.disconnect(2);

(意外发现) - 这会发送不同的断开连接错误代码:'失败:在收到握手响应之前连接已关闭'。然后前端套接字正在尝试重新连接。

但是随后您又遇到了另一个问题-套接字连接/断开连接使连接泛滥。

于 2015-05-02T15:14:27.080 回答