我正在使用Socket IO创建类似于whatsapp的消息传递Web应用程序,但我在检测联系人列表中的用户是在线还是离线时遇到问题。
我已经实现了一个名为" new user"每当新客户端连接到服务器时,它会将它们添加到一个阵列,然后将其广播到所有客户端,之后客户端遍历所有阵列并检查其中的哪一个位于其联系人列表中以确定其是否在线。
问题是想象一下,如果有50.0000个用户连接和断开连接。所有客户都必须每次更新和比较所有在线用户及其联系人列表。这听起来像是一种非常低效的方式。
有什么想法吗?
服务器
socket.on('new user', function(data, callback) {
if (data in nicknames) {
callback(false);
} else {
callback(true);
socket.nickname = data;
nicknames[socket.nickname] = 1;
console.log("connected "+socket.nickname);
updateNickNames();
}
});
socket.on('disconnect', function(data) {
if(!socket.nickname) return;
delete nicknames[socket.nickname];
console.log("disconnected "+socket.nickname);
updateNickNames();
});
function updateNickNames() {
io.sockets.emit('usernames', nicknames);
}
客户端:
socket.on('usernames', function(data) {
for (var username in data) {
for(var i = 0; i < contactList.length; i++) {
if(username == contactList[i]){
alert("user "+contactList[i]+" online");
}
}
}
});