node.js - 我应该使用什么? Socket.io 房间还是 Redis pub-sub?

标签 node.js redis socket.io publish-subscribe

很简单的问题。我正在使用 nodejs 作为我的后端构建一个实时游戏,我想知道是否有任何可用信息说明哪个更可靠,哪个更有效? 我在整个代码中大量使用 Redis 和 Socket.io。所以我想知道我是否应该使用 Socket.io 的 Rooms或者我最好使用redis'pub-sub ?

更新: 刚刚意识到有一个非常重要的原因,您可能希望通过 socket.io 房间使用 redis pub/sub。使用 Socket.io 房间,当您发布到监听器时,(浏览器)客户端接收消息,使用 redis 实际上是(redis~on 服务器)客户端接收消息。出于这个原因,如果您想通知所有(服务器)客户端特定于每个客户端的信息,并且可能在传递给浏览器客户端之前进行一些处理,那么最好使用 redis。使用 redis 你可以触发一个事件来生成每个用户的个人数据,而与 socket.io 一样,你必须一次真正地生成所有用户的唯一数据,然后循环它们并将他们的个人数据发送给他们,这几乎打败了房间的用途,至少对我来说是这样。

不幸的是,出于我的目的,我现在被 redis 困住了。

更新 2: 最终开发了一个插件以仅使用 2 个 redis 连接,但仍允许单独的客户端处理,请参阅下面的答案....

最佳答案

Redis pub/sub 非常适合所有客户端都可以直接访问 redis。如果您有多个 Node 服务器,一个可以向其他 Node 推送消息。

但是如果您在浏览器中也有客户端,则需要其他东西将数据从服务器推送到客户端,在这种情况下,socket.io 很棒。

现在,如果您将 socket.io 与 Redis 存储一起使用,socket.io 将在后台使用 Redis pub/sub 在服务器之间传播消息,而服务器将向客户端传播消息。

因此,使用带有 Redis 存储的 socket.io 配置的 socket.io 房间对您来说可能是最简单的。

关于node.js - 我应该使用什么? Socket.io 房间还是 Redis pub-sub?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929700/

相关文章:

Node.js fs.readFile()

javascript - 用户在 session 仍然经过身份验证时单击后退按钮并被重定向到 node.js 中的登录页面

node.js - 如何从模块导出值?

Laravel 顺序处理用户的并发请求

node.js - 如何在 session expressjs中存储套接字对象

javascript - heroku Node js redis出错

node.js - 错误:Redis与127.0.0.1:6379的连接失败-连接ECONNREFUSED 127.0.0.1:6379 Heroku

asp.net-mvc - 更新 nuget 后 StackExchange.Redis.Extensions 错误

angularjs - 如何使用 angular-socket-io 库设置 socket.io 服务器?

android - 如何在 android 中使用套接字从 REST Api 获取 JSON 响应以动态膨胀 recyclerview?