我试图找出如果客户一次又多次加入同一个房间会发生什么事情,为了测试并找到答案,我最初想知道在同一客户发送更多客户后房间有多少然后一个人开始加入房间,但是wiki https://github.com/Automattic/socket.io/wiki/Rooms中的房间章节已经过时了。当我尝试使用" io.sockets.clients(' room')"我收到错误"对象#没有方法'客户'"。
所以我有两个问题: 1.如果客户试图再次加入同一个房间会发生什么?每次他试图加入时,他会为那个房间发泄吗? 2.如何找出房间内的客户?
我正在使用socket.io v1.0.2
答案 0 :(得分:17)
我在socket.io github得到了关于这个问题的答案。
根据this代码行,套接字只会接收一次发出的内容。套接字只添加到一个房间一次,如果再次尝试同一个套接字加入房间,这个尝试将被忽略。
目前没有用于获取客户端的公共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]);
}
答案 1 :(得分: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]);
}
答案 2 :(得分:0)
它工作正常并且没有出现任何错误,它忽略了第二个从房间中已有的套接字加入房间的请求。
我实际上已经尝试并实施了一个解决方案, 当用户单击消息通知时,该消息将加入该通知所在的特定房间,并且当他发送第一条消息时,他将再次加入该特定房间(这是因为我已在AngularJS中建立了一个聊天指令)。
客户端
1)用户打开通知
Socket.emit('JoinRoomWithThsID', notification.ConversationID);
2)用户在该房间中发送第一条消息
Socket.emit('patientChatRoomMessage', adminmessage);