socket.io断开连接,然后重新连接

socket.io断开连接,然后重新连接,socket.io,Socket.io,我正在尝试断开客户端,然后重新连接它 我可以使用socket.disconnect()断开客户端与服务器端的连接 但是我不能再连接了,有办法吗 问题是我在客户端连接回调中有一个特定的处理方法,如果我在断开连接事件后尝试连接客户端,它就不会触发回调,我不明白为什么 这里有一个明显的例子: 客户端 var Socket = io.connect('http://127.0.0.1:3000'); function bind_socket(Socket) { Socket.on('conne

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

我可以使用
socket.disconnect()断开客户端与服务器端的连接

但是我不能再连接了,有办法吗

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

这里有一个明显的例子:

客户端

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');
    });
});

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


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

如果您使用的是Socket.io 1.0,请尝试使用套接字上的
io
管理器执行
断开()
重新连接()

请参见上的示例尝试使用

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


但是,您又遇到了另一个问题-套接字连接/断开连接会导致连接泛滥。

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

事实上我使用socket.io已经有几个月了。在开发过程中,它工作得很好,但在生产过程中,您将面临许多CPU和内存方面的问题。切换到sockjs会更好。我希望v1.0很快就会出现(已经6个多月了,我一直这么说……)。我将socket.io用于它的
rooms
服务,在sockjs上似乎不存在,但是我同意这可能是一个更好的选择,关于如何弃用
socket.io
的问题…这里也是一样…我正在等待1.0版,但如果你查看他们github页面上的活动..有500多个打开的问题..sockjs更好,但功能更少这真的帮助了我。特别是在测试期间,您必须多次连接和重新连接以测试不同的事件。谢谢这在Socket.IO 2.x中不再正确。使用
connect()
代替中提到的@Qiulang。这似乎是socket.io 1.x的方法,非常感谢!与socket.disconnect()不同,socket.io.disconnect()触发断开连接处理程序并实际终止连接。socket.disconnect()仅调用处理程序。。。