Der*_*rek 5 chat chatroom websocket node.js socket.io
我不是在谈论一般的聊天应用程序,而是特别关于聊天室实现.
所以在node.js/socket.io中,我想到了两种方法
为每个聊天室创建一个数组,向阵列中的所有用户广播消息
向所有用户广播所有消息,在客户端的PC上确定它们是否属于聊天室,如果是,则接受该消息.
1中的弱点是,当你扩展时,你将使用数组对象充斥服务器的内存,而我在托管上只使用大约80mb.
2中的弱点是,向所有人广播最终是昂贵的,并且充斥客户的机器不会让他们感到高兴.
我确信有更好的方法来实现聊天室,这就是为什么我要求你们帮助我.我首先在服务器端寻找性能,然后是客户端,它必须是可扩展的.
Socket.IO 0.7+引入了一个房间概念.这可能是你正在寻找的东西.
io.sockets.on('connection', function (socket) {
socket.join('room name');
// broadcast the message to everybody in the room
socket.on('chat message', function (data) {
socket.broadcast.to('room name').emit('chat message', data);
});
socket.on('leave room', function (room) {
socket.leave(room);
});
});
Run Code Online (Sandbox Code Playgroud)
所以不需要为特定房间的用户管理自己的阵列,socket.io有这个内置.
我在这里做了类似的事情:
http://davidgranado.com/demos/chat_shuffle/
您可以通过打开多个窗口并与自己聊天来测试它,因为每个实例都被视为一个人(这是我的第一个节点应用程序)。
它的工作方式是每个人都与另一个人配对进行对话。实际上,每个人都在一个两人房间里。
为了传达消息,我将用户注册为彼此关联,并且仅将其发送给一位合作伙伴 Chatter。这个想法可以很容易地扩展到任意数量的人以将聊天者联系起来。这样,您就不必向每个人进行浪费的广播。
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |