【问题标题】:Socket.io Detect whether reconnecting or completely disconnectingSocket.io 检测是重新连接还是完全断开
【发布时间】:2012-03-22 13:18:45
【问题描述】:

我正在使用 Node.js 和 Socket.io 开发一个聊天应用程序,并且在断开连接时,其余用户会收到一条警报,说他们的合作伙伴已断开连接。

问题是每隔一段时间,Socket.io 会自动断开连接然后重新连接。我的聊天应用程序正在触发警报,即使合作伙伴并没有真正断开连接。

代码:

var clients = {};
var soloClients = [];
io.sockets.on('connection', function (socket) {

    //Session start
    socket.on('sessionStart', function () {
        clients[socket.id] = socket;
        soloClients.push(socket.id);

        var searchClients = function(){
            if(soloClients.length > 1){
                var rand = Math.floor(Math.random() * soloClients.length);
                if(soloClients[rand] && soloClients[rand] != socket.id){
                    if(clients[soloClients[rand]]){
                        var you = clients[socket.id];
                        var partner = clients[soloClients[rand]]

                        clients[partner.id]['partner'] = you.id;
                        clients[you.id]['partner'] = partner.id;
                        soloClients.splice(soloClients.indexOf(you.id), 1);
                        soloClients.splice(soloClients.indexOf(partner.id), 1);

                        partner.emit('partnerConnect', null);
                        socket.emit('partnerConnect', null);
                    }
                    else{
                        soloClients.splice(rand, 1);
                        searchClients;
                    }
                }
                else{
                    searchClients();
                }
            }
        };
        searchClients();
    });

    //On disconnect
    socket.on('disconnect', function(){
        soloClients.splice(soloClients.indexOf(socket.id), 1);

        if(clients[socket.id]){
            if(clients[clients[socket.id]['partner']]){
                clients[clients[socket.id]['partner']].emit('partnerDisconnect', null);
            }
            delete clients[socket.id];
        }
    });
});

我想知道有没有办法解决这个问题。

谢谢!

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    也许您应该尝试找出客户端断开连接的真正原因? IE。是连接不良、防火墙问题还是其他原因?

    另外,你应该检查你从断开连接中得到的错误,如果它是一个干净的断开连接(没有错误)你会做正常的通知,但如果它是一个错误你可能想要以不同的方式处理它。

    【讨论】:

      【解决方案2】:

      事实证明,这种行为不应该发生,它只是那个版本中的一个错误。此错误已在最新版本中修复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 2021-04-12
        • 1970-01-01
        • 2013-11-29
        • 2012-05-17
        相关资源
        最近更新 更多