Node.js Socket.IO向多个房间发送消息

Node.js Socket.IO向多个房间发送消息,node.js,socket.io,Node.js,Socket.io,我在Node Express应用程序中使用Socket.IO,并使用中描述的方法关联套接字连接和会话。在中,作者描述了一种向特定用户(会话)发送消息的方法,如下所示: sio.on('connection', function (socket) { // do all the session stuff socket.join(socket.handshake.sessionID); // socket.io will leave the room upon discon

我在Node Express应用程序中使用Socket.IO,并使用中描述的方法关联套接字连接和会话。在中,作者描述了一种向特定用户(会话)发送消息的方法,如下所示:

sio.on('connection', function (socket) {
    // do all the session stuff
    socket.join(socket.handshake.sessionID);
    // socket.io will leave the room upon disconnect
});

app.get('/', function (req, res) {
    sio.sockets.in(req.sessionID).send('Man, good to see you back!');
});

看起来是个好主意。然而,在我的应用程序中,我经常会同时向多个用户发送消息。我想知道在Socket.IO中实现这一点的最佳方法——本质上,我需要以尽可能最好的性能将消息发送到多个房间。有什么建议吗?

两个选项:使用socket.io通道或socket.io命名空间。这两者都记录在socket.io网站上,但简而言之:

使用频道:

// all on the server
// on connect or message received
socket.join("channel-name");
socket.broadcast.to("channel-name").emit("message to all other users in channel");

// OR independently
io.sockets.in("channel-name").emit("message to all users in channel");
使用名称空间:

// on the client connect to namespace
io.connect("/chat/channel-name")

// on the server receive connections to namespace as normal
// broadcast to namespace
io.of("/chat/channel-name").emit("message to all users in namespace")

由于socket.io足够智能,不会为其他名称空间打开第二个套接字,因此这两种方法的效率应该相当。

我认为它们相当于我已经在识别每个用户方面所做的工作。也就是说,每个用户根据会话密钥获得自己的socket.io通道,我广播到该通道以便发送给该用户(而不是直接在一个套接字上发射)。因此,我的问题是:如果其中两个用户(每个用户都由一个聊天室表示)需要接收相同的消息,有没有一种有效的方法可以做到这一点?最后一位不应该是'io.of('/chat/channel name')吗?你有没有找到一种好方法(在群组/聊天室中向不同的用户发送相同的消息)?