我的每个连接用户的套接字ID都存储在我的数据库中。当任何用户发布评论或状态时,我想使用存储在我的数据库中的套接字ID将其广播到他/她的所有连接。
我可以使用他/她的套接字ID通过使用io.sockets.connected [socket.id]发送消息给个人客户端.emit(' privateMsg','你好!你好吗? ?&#39);
但是我如何向使用我的数据库中的select query生成的socket id数组发出相同的内容。
答案 0 :(得分:5)
您可以使用rooms
的概念。每当套接字连接到达时,加入到房间的连接。断开连接后,从房间中取出插座。
socket.on('connection', function () {
socket.join('room1');
});
socket.on('disconnect', function () {
socket.leave('room1');
});
现在,当您想要将消息发送到房间连接的插座时,您可以将其广播到房间。
socket.broadcast.to('room1').emit('eventName', data);
答案 1 :(得分:1)
您可以为每个连接并向其发出的套接字动态创建一个空间,而不必每次都遍历整个数组。像这样:
socketids.foreach(function(socketid){io.sockets.connected[socketid].join(sendingSocket.id);});
然后,您可以通过执行以下操作从发送套接字发出这些套接字:
sendingSocket.to(sendingSocket.id).emit('publicMessage', 'Hello! How are you?')
作为旁注,我不认为保留数据库中更改的套接字ID是最好的方法,因为它们根本没有持久性。您可能想尝试为数据库找到更好的标识符。