[英]Check in what room is a specified client socket io
我正在嘗試為我的socket.io聊天創建“可見”功能。 為此,我需要知道接收方客戶端在哪個房間中,該怎么辦? 例如,如果某個用戶向某個組發送消息,我想檢查該組中所有用戶當前的房間,然后說出他們是否在此房間中。
我這樣做的方法是維護服務器上已連接套接字的列表,並在連接時添加它們(但請檢查是否重復)。 您可以通過使用socket.rooms
查看套接字所屬於的socket.rooms
。 用戶也可以是多個房間的一部分,因此iirc,socket.rooms是各種數組或集合。
使用以下代碼,您可以獲得與請求套接字共享房間的用戶列表。
var connected_sockets = [];
io.on("connection",function(socket){
socket.on("request", function(msg){
var socket = get_user_connection(socket.id);
if(socket == null){
connected_sockets.push(socket); //add if not already
}
var users_in_same_room = [];
for(var x = 0; x < socket.rooms.length; x++){
for(var y = 0 ; y < connected_sockets.length; y++){
if(connected_sockets[y].id == socket.id) continue;
if(is_user_in_room(connected_sockets[y],socket.rooms[x])){
//they share a room
users_in_same_room.push(connected_sockets[y]);
} else {
//they do not share a room
}
}
}
}
});
var get_user_connection = function(socket_id){
for(var x = 0 ; x < connected_sockets; x++){
if(connected_sockets[x].id == socket_id){
return connected_sockets[x];
}
}
return null;
}
var is_user_in_room = function(socket,room_name){
for(var x = 0 ; x < connected_sockets[x].rooms.length; x++){
if(connected_sockets[x].rooms[y] == room_name){
return true;
}
}
return false;
}
像上面的東西。 我敢肯定您可以對其進行優化,但這就是事實。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.