Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 实现可扩展聊天服务器的策略_Node.js_Architecture_Message Queue - Fatal编程技术网

Node.js 实现可扩展聊天服务器的策略

Node.js 实现可扩展聊天服务器的策略,node.js,architecture,message-queue,Node.js,Architecture,Message Queue,我希望实现某种聊天服务器。我希望它能够扩展。这似乎是一个大问题,所以我想我希望答案是方向指示,某种探索性的 最终用户客户端是web或电话客户端。我认为某种websocket实现,比如Socket.IO是不错的 在服务器端,我希望使用Node.js。我希望该体系结构具有可扩展性,这样用户数量就不会受到限制(好吧,在合理的范围内,预计不会有大的成功机会,如果是的话,让更聪明、经验丰富的人参与其中的机会是合理的,而不是目前只对我进行编码)每个聊天室的用户数量希望不会受到限制,或者一些固定的大数字。这意

我希望实现某种聊天服务器。我希望它能够扩展。这似乎是一个大问题,所以我想我希望答案是方向指示,某种探索性的

最终用户客户端是web或电话客户端。我认为某种websocket实现,比如Socket.IO是不错的

在服务器端,我希望使用Node.js。我希望该体系结构具有可扩展性,这样用户数量就不会受到限制(好吧,在合理的范围内,预计不会有大的成功机会,如果是的话,让更聪明、经验丰富的人参与其中的机会是合理的,而不是目前只对我进行编码)每个聊天室的用户数量希望不会受到限制,或者一些固定的大数字。这意味着我需要使用在Node中编写的几个服务器进行水平扩展

假设某个负载平衡器(希望将来不会出现单点故障,但我不知道如何实现这一点,或者可能只是转移到AWS)正在将SocketIO连接从终端客户端发送到聊天服务器。连接到不同服务器的不同用户可能在同一个房间中,因此需要将消息发送到其他服务器

我如何切实可行地实现这样的东西?希望不要太复杂

问题: (1) 如果所有服务器都需要处理所有消息,因为用户可以通过任何一台服务器登录,那么这是否可以扩展? (2) 我是否需要某种消息队列,以便服务器之间进行通信?Rabbitmq的Pub sub是否可用于此目的?或者如果是zeromq,我将如何使用pub sub进行扩展?Zeromq指南解释了如何使用REQ/REP类型的应用程序扩展到多个服务器。但不是酒吧。 (3) 还是从XMPP开始


我希望它能尽可能简单地工作。

Socket.io网站上有一个很好的解释。看看

它建议使用Nginx作为HTTP负载均衡器,Node.js集群(带有粘性会话)和Redis作为消息后端


我认为您的目标应该是可以实现的,只需使用给定的模块和配置机制,几乎不涉及编码。

因此,在这种情况下,redis就像一个MQ。您是否知道,如果我希望聊天消息转储到MongoDB,我将如何实现?如果我有一个Node.js服务器,它订阅所有内容并将其记录到MongoDB,那么它似乎不可伸缩。但如果我有两个,我会记录它…两次?我不是这方面的专家,但afaik MongoDB支持节点之间的复制。。。Redis的速度非常快,也许您可以将其用作“主存储”,并异步保存到MongoDB实例?