使用 socket.io 管理多个聊天室的正确方法是啥?
Posted
技术标签:
【中文标题】使用 socket.io 管理多个聊天室的正确方法是啥?【英文标题】:What is the proper way to manage multiple chat rooms with socket.io?使用 socket.io 管理多个聊天室的正确方法是什么? 【发布时间】:2011-10-06 23:26:39 【问题描述】:使用 socket.io 管理多个聊天室的正确方法是什么?
所以在服务器上会有类似的东西:
io.sockets.on('connection', function (socket)
socket.on('message', function (data)
socket.broadcast.emit('receive', data);
);
);
现在这对于一个房间来说可以正常工作,因为它会将消息广播给所有连接的人。但是,您如何向特定聊天室中的人发送消息?
添加 .of('/chat/room_name')? 或者在一个房间里存储一个数组?
【问题讨论】:
【参考方案1】:Socket.IO v0.7 现在为您定义的每个命名空间提供一个 Socket
:
var room1 = io.connect('/room1');
room1.on('message', function ()
// chat socket messages
);
room1.on('disconnect', function ()
// chat disconnect event
);
var room2 = io.connect('/room2');
room2.on('message', function ()
// chat socket messages
);
room2.on('disconnect', function ()
// chat disconnect event
);
使用不同的套接字,您可以有选择地发送到您想要的特定命名空间。
Socket.IO v0.7 也有“房间”的概念
io.sockets.on('connection', function (socket)
socket.join('a room');
socket.broadcast.to('a room').send('im here');
io.sockets.in('some other room').emit('hi');
);
来源:http://socket.io/#announcement
【讨论】:
谢谢,我认为第二个示例是我正在寻找的,因为房间是动态创建的。所以可以说我有两个部分,聊天和群组。我会做 io.connect('/chat OR /group') 并让 socket.join('GROUP OR CHAT ID') 连接到特定的群组或聊天吗? 我相信是的。第一个允许您订阅不同的频道,第二个为您提供一个简单的房间概念,您可以将不同的套接字分组。【参考方案2】:更新:Now.js 和 Bridge 现在都死了,请参阅 now.js dead 和 bridge dead。 Socket.io 似乎从 v0.9 开始采用了回调功能,这是向前迈出的一大步。
虽然它与 Socket.io 没有直接关系,但 Now.js(Socket.io 之上的更高级别抽象)支持组 - http://nowjs.com/doc
他们在官方仓库中有一个多房间聊天示例:https://github.com/Flotype/now/blob/master/examples/multiroomchat_example/multiroomchat_server.js
【讨论】:
那个项目可能已经死了,网页是 404,最后一次提交是一年前。以上是关于使用 socket.io 管理多个聊天室的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章