簡體   English   中英

檢查哪個房間是指定的客戶端套接字io

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM