5

我并不是真的在谈论一般的聊天应用程序,而是专门谈论聊天室的实现。

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

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

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

1 中的弱点是,最终当你扩大规模时,你会用数组对象淹没服务器的内存,而我在主机上只使用了大约 80mb。

2 中的弱点在于,向所有人广播最终代价高昂,并且淹没客户的机器不会让他们开心。

我确信在如何实现聊天室方面有更好的方法,所以这就是我请求你们帮助我的原因。我正在寻找服务器端的性能,然后是客户端,它必须是可扩展的。

4

3 回答 3

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);
  });
});

因此,无需与特定房间的用户一起管理您自己的阵列,socket.io 已内置此功能。

于 2011-09-20T13:32:19.460 回答
1

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

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

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

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

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

于 2011-09-20T05:55:09.200 回答
-2

Now.js 将使这更容易:http ://nowjs.com/guide - 他们的指南已经有一个如何,以及他们的 github 存储库https://github.com/Flotype/now/tree/master/examples /multiroomchat_example

于 2011-09-20T10:15:30.793 回答