我希望实现某种聊天服务器.我希望它能够扩展.这似乎是个大问题,所以我想我希望答案是方向指针,有点探索性.
最终用户客户端是Web或电话客户端.我认为某种websocket实现,比如Socket.IO很好.
在服务器端,我希望使用Node.js. 我希望架构具有可扩展性,以便用户数量不受限制(在合理的范围内,不会出现大受欢迎的机会,如果是这样的话,让更聪明,有经验的人工作的机会是合理的而不是目前只是我编码)每个聊天室的用户数量希望不受限制,或者可能是一些固定的大数字.这意味着我需要使用Node编写的几个服务器进行水平扩展.
假设一些负载均衡器(并且希望将来不是单点故障,但我不知道如何实现这一点,或者可能只是转移到AWS)正在从最终客户端向聊天服务器发送SocketIO连接.不同用户与不同服务器的连接可能在同一个房间,因此需要将消息发送到其他服务器.
我怎么能切实地实现这样的东西?希望不要太复杂.
问题:(1)如果所有服务器都需要处理所有消息,因为用户可以通过任何服务器登录,这是否会扩展?(2)我是否需要某种消息队列让服务器在它们之间进行通信?Rabbitmq的Pub-sub是否适用于此?或者如果是zeromq,我将如何使用pub sub进行缩放?Zeromq指南解释了使用REQ/REP类型的应用程序扩展到多个服务器.但不是Pub Sub.(3)或者我应该从XMPP开始?
我希望尽可能简单地工作.
在Socket.io网站上有一个相当不错的解释.看一下
http://socket.io/docs/using-multiple-nodes/
它建议使用Nginx作为HTTP负载均衡器,Node.js集群(使用粘性会话)和Redis作为消息后端.
我认为只有使用给定的模块和配置机制,您的目标才能实现,几乎没有编码.