我想解释一下我过去几天遇到的一个问题,但我无法解决。我正在使用socket.io,使用房间向多个客户端发射。我正在测试重新连接的情况(例如,由于wi-fi连接失败)。
情况如下: 客户方:
socket.on('reconnect', function () {
var socketId = socket.id;
socket.emit('reconnectAttempt',{
id: $matchId,
username: $username,
socketId: socketId
});
log("you were reconnected");
});
服务器端:
socket.on('reconnectAttempt',function(data){
listClientsInRoom(data.id);
socket.join(data.id); // Since socket.id changes after reconnect
listClientsInRoom(data.id);
socket.to(data.id).emit('reconnect attempt succeeded');
};
其中:
function listClientsInRoom(key){
var clients = io.sockets.adapter.rooms[key].sockets;
console.log('___Clients in room:'+JSON.stringify(clients));
}
和输出类似(在这种情况下只有一个客户端重新连接):
___Clients in room:{"mfA-h4IkTtUMgPNsAAAD":true}
___Clients in room:{"mfA-
h4IkTtUMgPNsAAAD":true,"ShdVRVzVr4x4WCggAAAE":true}
在这种情况下,重新连接事件后的socket.id为ShdVRVzVr4x4WCggAAAE。 然后,在这种情况下,似乎已正确添加套接字 到了房间,但正如你所看到的,在加入之后,我做了:
socket.to(data.id).emit('reconnect attempt succeeded');
这应该只是在客户端(在所有房间)进行日志,并且在除了重新连接的客户端之外的所有客户端中工作。如果我这样做:
socket.emit('reconnect attempt succeeded');
相反,我会正确地看到日志。
有人可以帮帮我吗?
由于
答案 0 :(得分:0)
愚蠢的错误,只是试图用这个重新连接尝试成功'事件,在问题中可以看出是错误的。
问题:
socket.to(data.id).emit('reconnect attempt succeeded');
正确的方式
io.to(data.id).emit('reconnect attempt succeeded');