我正在使用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];
}
});
});
我想知道是否有办法解决这个问题。
谢谢!
答案 0 :(得分:0)
也许您应该尝试找出客户端断开连接的真正原因?即这是一个糟糕的连接,或防火墙问题,还是其他什么?
此外,您应该检查从断开连接获得的错误,如果它是干净的断开连接(没有错误),您执行正常通知,但如果这是一个错误,您可能希望以不同的方式处理它。
答案 1 :(得分:0)
事实证明,这种行为不应该发生,它只是该版本中的一个错误。此错误已在最新版本中修复。