【问题标题】:socket.io 'connect' or 'reconnect' event not fired after reconnect重新连接后未触发socket.io“连接”或“重新连接”事件
【发布时间】:2016-03-28 20:08:13
【问题描述】:

我在使用 Socket.io 时遇到问题。

代码很简单:

var socket = null;
var socketInit = false;    //if it is true, use reconnect

...
function connect() {
    if(!socketInit) {
        socket = io();
        socketInit = true;

        //attach event handlers
        socket.on('connect', function() {
            console.log('connect fired!');
        });
        socket.on('disconnect', function() {
            console.log('disconnect fired!');
        });
        socket.on('reconnect', function() {
            console.log('reconnect fired!');
        });
    }
    else {
        socket.io.connect();
    }
}

...
function disconnect() {
    socket.disconnect();
}

如您所见,有两个函数可以连接或断开套接字。在连接函数中,它将“连接”、“断开”、“重新连接”处理程序附加到套接字。

首先我调用了连接函数,它运行良好。服务器端也运行良好。我调用了断开功能,作为服务器也很好用。

但我再次调用了connect函数,这意味着“socketInit”变量为真,所以connect函数尝试:

socket.io.connect();

我检查了服务器和客户端控制台,看起来它已经连接,但问题是事件没有被触发!

重新连接时会触发服务器端“连接”事件,但未触发客户端“连接”或“重新连接”事件。我试图弄清楚发生了什么,但我仍然不明白。我多次检查了 web 控制台和服务器控制台,连接本身工作正常,但问题是事件不起作用!

如果有人知道路,将非常感谢帮助我。谢谢;)

附言我尝试添加“重新连接”、“重新连接”、“重新连接错误”事件处理程序,但都不起作用。

【问题讨论】:

  • 我不确定你能不能那样做。谁在连接这个套接字?如果是socket.io客户端,那么只有客户端才能重连。
  • xbirkett// 感谢您的评论。这些是客户端代码。我只想做的是客户可以随时连接/断开/重新连接。你对此有更好的建议吗?这将是非常感谢-给我一个更好的方法;)

标签: javascript node.js sockets socket.io


【解决方案1】:

我使用的是socket.io 2.1.1,这里是socket.io处理断开后重新连接时的所有事件序列:

只要socketClient.on(eventName, callBackFunc);

【讨论】:

    【解决方案2】:

    如果您使用的是 Socket.io 1.0,请尝试使用套接字上的 io 管理器来处理手动断开和重新连接。

    var socket = null;
    var socketInit = false;
    
    function connect() {
        if(!socketInit) {
            socket = io();
            socketInit = true;
    
            //attach event handlers
            socket.on('connect', function() {
                console.log('connect fired!');
            });
            socket.on('disconnect', function() {
                console.log('disconnect fired!');
            });
            socket.on('reconnect', function() {
                console.log('reconnect fired!');
            });
        }
        else {
            socket.io.reconnect();
        }
    }
    
    
    function disconnect() {
        socket.io.disconnect();
    }
    

    socket上的reconnecting_attempt、reconnecting、reconnected和connected事件都应该在之后触发。

    【讨论】:

    • 这似乎不再适用于socket.io,因为现在断开设置skipReconnecting=true所以调用.reconnect()什么都不做,而调用connect()可以重新连接套接字但不会触发事件!
    • 似乎相反,我们有“打开”和“关闭”事件,但连接和断开连接的数据包从未到达?
    猜你喜欢
    • 2018-01-28
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多