非常简单的问题.我正在使用nodejs作为我的后端构建一个实时游戏,我想知道是否有任何信息可用哪个更可靠哪个更有效?我在整个代码中大量使用Redis和Socket.io.所以我想知道我是否应该使用Socket.io的房间,或者我最好使用redis'pub -sub?
更新: 刚刚意识到有一个非常重要的原因,你可能想在socket.io房间使用redis pub/sub.使用Socket.io房间发布给监听器时,(浏览器)客户端收到消息,redis实际上是(redis~on on server)客户端收到消息.因此,如果您想要通知所有(服务器)客户端特定于每个客户端的信息,并且可能在传递给浏览器客户端之前进行一些处理,那么最好使用redis.使用redis你可以发起一个事件来生成每个用户的个人数据,就像socket.io一样,你必须一次实际生成所有用户的唯一数据,然后遍历它们并发送它们各自的数据,这几乎击败了房间的目的,至少对我而言.
不幸的是,就我的目的而言,我现在仍然坚持使用redis.
更新2:结束开发插件只使用2个redis连接,但仍然允许单独的客户端处理,请参阅下面的答案....
我希望实现某种聊天服务器.我希望它能够扩展.这似乎是个大问题,所以我想我希望答案是方向指针,有点探索性.
最终用户客户端是Web或电话客户端.我认为某种websocket实现,比如Socket.IO很好.
在服务器端,我希望使用Node.js. 我希望架构具有可扩展性,以便用户数量不受限制(在合理的范围内,不会出现大受欢迎的机会,如果是这样的话,让更聪明,有经验的人工作的机会是合理的而不是目前只是我编码)每个聊天室的用户数量希望不受限制,或者可能是一些固定的大数字.这意味着我需要使用Node编写的几个服务器进行水平扩展.
假设一些负载均衡器(并且希望将来不是单点故障,但我不知道如何实现这一点,或者可能只是转移到AWS)正在从最终客户端向聊天服务器发送SocketIO连接.不同用户与不同服务器的连接可能在同一个房间,因此需要将消息发送到其他服务器.
我怎么能切实地实现这样的东西?希望不要太复杂.
问题:(1)如果所有服务器都需要处理所有消息,因为用户可以通过任何服务器登录,这是否会扩展?(2)我是否需要某种消息队列让服务器在它们之间进行通信?Rabbitmq的Pub-sub是否适用于此?或者如果是zeromq,我将如何使用pub sub进行缩放?Zeromq指南解释了使用REQ/REP类型的应用程序扩展到多个服务器.但不是Pub Sub.(3)或者我应该从XMPP开始?
我希望尽可能简单地工作.