11

我试图弄清楚如果客户多次发出加入同一个房间会发生什么,为了测试并找到答案,我最初想找出在相同的客户发送多于一个发射加入后有多少客户房间房间,但是 wiki https://github.com/Automattic/socket.io/wiki/Rooms中的房间章节已经过时了。当我尝试使用“io.sockets.clients('room')”时,我收到错误“对象 # 没有方法 'clients'”。

所以我有两个问题: 1. 如果客户多次尝试加入同一个房间会发生什么?每次他尝试加入时,他会得到那个房间的发射吗?2. 我怎样才能知道房间里有哪些客户?

我正在使用 socket.io v1.0.2

4

3 回答 3

19

我在socket.io github上得到了这个问题的答案。

  1. 根据行代码,套接字将只接收一次发射。套接字仅添加到房间一次,如果再次尝试将同一套接字加入房间,则此尝试将被忽略。

  2. 目前没有用于获取客户端的公共 API,并且在#1428中正在进行一些讨论。如果您真的需要获取它们,出于某种原因,您可以从适配器获取实际的客户端,假设您没有像这样使用 redis 适配器:

    socket.join('test room');
    var clients = io.sockets.adapter.rooms['test room'];
    console.log(clients);
    for (var clientId in clients) {
      console.log(io.sockets.connected[clientId]);
    }
    
于 2014-05-29T22:08:34.237 回答
0

修复了在 socket.io ~1.4.5 的房间中获取客户端的问题,如下所示:

    socket.join('test room');
    var room = io.sockets.adapter.rooms['test room'];
    console.log(room);
    for (var socketId in room.sockets) {
      console.log(io.sockets.connected[socketId]);
    }
于 2016-04-05T14:42:48.350 回答
0

它工作正常并且没有给出任何错误,它忽略了从已经在房间中的那个套接字加入房间的第二个请求。

我实际上已经尝试并实现了一个解决方案,当用户单击消息通知时,它会加入通知来自的特定房间,并且当他发送第一条消息时,他再次加入该特定房间(这是因为我已经建立了一个 Chat- AngularJS 中的指令)。

客户端

1) 用户打开通知

Socket.emit('JoinRoomWithThsID', notification.ConversationID);

2) 用户在那个房间发送第一条消息

Socket.emit('patientChatRoomMessage', adminmessage);
于 2018-08-09T12:35:04.560 回答