socket.to(roomId)。重新连接后无法正常工作

时间:2017-11-13 18:52:20

标签: node.js sockets websocket socket.io

我想解释一下我过去几天遇到的一个问题,但我无法解决。我正在使用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');

相反,我会正确地看到日志。

有人可以帮帮我吗?

由于

1 个答案:

答案 0 :(得分:0)

愚蠢的错误,只是试图用这个重新连接尝试成功'事件,在问题中可以看出是错误的。

问题:

socket.to(data.id).emit('reconnect attempt succeeded');

正确的方式

io.to(data.id).emit('reconnect attempt succeeded');