socket.io 创建动态房间

Posted

技术标签:

【中文标题】socket.io 创建动态房间【英文标题】:socket.io create dynamic room 【发布时间】:2013-10-18 13:13:47 【问题描述】:

我已经在谷歌上搜索了 2 天,以使用 nodeJs 在 socket.io 上动态创建房间。当我为服务器创建一个房间时,我会这样:

socket.on('follow_me', function (user_id)  //I use the user_id of the user to create room

    socket.join(user_id);

    console.log(server.sockets.manager.rooms);
);

如果接下来,我想通过使用向所有连接的人发送消息

socket.join(user_id);

当我使用时:

socket.on('message', function (data) 

    socket.broadcast.to(data.room).emit('recieve',data.message); //emit to 'room' except this socket

);

这个房间的其他用户没有收到消息;但如果我使用:

socket.join(user_id);`,when i use :

    socket.on('message', function (data) 

    socket.broadcast.emit('recieve',data.message);

);

所有用户都会收到消息。为什么房间不适合我?我认为代码很好!

坦克的

【问题讨论】:

见[Socket.io间broadcast.to和sockets.in的区别][1][1]:***.com/questions/6873607/… 代码看起来不错,也许,检查data.room 【参考方案1】:
socket.on('message', function (data) 
        /*considering data.room is the correct room name you want to send message to */
        io.sockets.in(data.room).emit('recieve', data.message) //will send event to everybody in the room while 
        socket.broadcast.to(data.room).emit('recieve', data.message) //will broadcast to all sockets in the given room, except to the socket which called it
        /* Also socket.broadcast.emit will send to every connected socket except to socket which called it */
    );

我猜你需要的是io.sockets.in

【讨论】:

坦克的这个答案。我的问题是我的错误。io.sockets.in(data.room).emit('recieve', data.message) 帮助发现我的代码中的错误,现在我继续使用 socket.broadcast.to(data.room).emit('recieve', data.message) 没有任何问题。socket.io 的代码很好。坦克对所有人

以上是关于socket.io 创建动态房间的主要内容,如果未能解决你的问题,请参考以下文章

带有 Socket.io 和 Node 的动态房间

socket.io 与私人房间聊天

Socket.io:如何正确加入和离开房间

关于 socket.io 中的房间创建

( Socket.io ) 一个socket连接多个房间

Node.js 和 Socket.io 创建房间