Socket.io仅向房间中的某些用户发送消息

时间:2018-12-11 05:20:21

标签: node.js websocket socket.io

我想使用socket.io在一个房间中发送消息,但是在某些情况下,我想跳过房间中的某些用户,所以我该怎么做。

当前,我正在使用以下代码在组

中发送消息
io.on('connection', function (socket) {
    sockets[socket.handshake.query.id]=socket;
    console.log("user_connect",socket.handshake.query );
    if(socket.handshake.query.user_type=="DRIVER"){
        socket.join('orderPool');
    }
    socket.join('USER_'+socket.handshake.query.id);


    socket.on('disconnect', function () {
        delete sockets[socket.handshake.query.id];

        console.log('user disconnected', socket.handshake.query.id);
    });

});

io.sockets.in("ROOMNAME").emit("POOL_EVENT_RECIEVED", data);

2 个答案:

答案 0 :(得分:0)

一种解决方案是仅与要发送消息的选定用户同时保留另一个房间"<room name>-selected users"。不要将要跳过的用户添加到该房间。

因此,当您向该会议室发送消息时,未添加到此会议室的用户将不会收到这些消息。

答案 1 :(得分:0)

有时io已断开连接,然后尝试再次重新连接,但我认为这不是您的问题。

注意,您可以向特定命名空间中存在的房间发送信息。如果您使用默认的命名空间'/',请尝试:

io.of('/').in("ROOMNAME").emit("POOL_EVENT_RECIEVED", data);

您还可以阅读socket.io发出备忘单:https://socket.io/docs/emit-cheatsheet/