讨论:使用node.js/socket.io实现聊天室的最佳方法?

Der*_*rek 5 chat chatroom websocket node.js socket.io

我不是在谈论一般的聊天应用程序,而是特别关于聊天室实现.

所以在node.js/socket.io中,我想到了两种方法

  1. 为每个聊天室创建一个数组,向阵列中的所有用户广播消息

  2. 向所有用户广播所有消息,在客户端的PC上确定它们是否属于聊天室,如果是,则接受该消息.

1中的弱点是,当你扩展时,你将使用数组对象充斥服务器的内存,而我在托管上只使用大约80mb.

2中的弱点是,向所有人广播最终是昂贵的,并且充斥客户的机器不会让他们感到高兴.

我确信有更好的方法来实现聊天室,这就是为什么我要求你们帮助我.我首先在服务器端寻找性能,然后是客户端,它必须是可扩展的.

3rd*_*den 5

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有这个内置.


Dav*_*ado 1

我在这里做了类似的事情:

http://davidgranado.com/demos/chat_shuffle/

您可以通过打开多个窗口并与自己聊天来测试它,因为每个实例都被视为一个人(这是我的第一个节点应用程序)。

它的工作方式是每个人都与另一个人配对进行对话。实际上,每个人都在一个两人房间里。

为了传达消息,我将用户注册为彼此关联,并且仅将其发送给一位合作伙伴 Chatter。这个想法可以很容易地扩展到任意数量的人以将聊天者联系起来。这样,您就不必向每个人进行浪费的广播。