关于我提出的问题: socket io changes socket.id repeatedly
Registering only happens when the client comes on the chatpage:
在客户端:
socketConnect: function() {
socket = io.connect('https://socket.mydomain.nl');
socket.on('connect', function() {
socket.emit('register', userID, 'Lobby');
});
};
服务器
var UserSockIdStorage = {},
Allsocketids = [];
//Clients connect and register here.
io.sockets.on('connection', function(socket) {
socket.on("register", function(userID, currentchannel, userinfostr) {
console.log('USER WITH ID ' + userID + ' REGISTERS WITH THE SOCKETIDOF: ' + socket.id);
UserSockIdStorage[userID] = socket.id; //userid is associated with the socket ID.
socket.room = currentchannel;
socket.join(currentchannel);
});
正如您所看到的,我将用户名存储在一个以套接字ID作为其值的数组中。 当要发送消息时,将查找用户名以检索套接字ID以将消息发送到。
现在来到我不明白的部分:
客户端不时重新连接(不注册,因此套接字ID不会保存在数组中!!),我可以看到他们获得了另一个套接字ID。
我的猜测是,当我通过用户名(Array UserSockIdStorage)查找用于向其发送消息的套接字ID时,该ID的所有者进行了多次重新连接,从而一次又一次地获取新的套接字ID, 由于客户端同时获得了几个新的套接字ID,所以发送给lookingUp套接字ID的消息不会去任何地方。
但是从我观察到的消息被路由到正确的客户端,所以第一个套接字ID仍然是它的套接字ID?!
这些ID是缓存还是有点?