Socket.IO消息传递到多个房间

时间:2012-02-13 15:11:25

标签: node.js socket.io

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

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中执行此操作的最佳方法 - 基本上我需要以最佳性能向多个房间发送消息。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

两个选项:使用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很聪明,实际上不能为其他名称空间打开第二个套接字,所以这两种方法的效率都应该相当。