【问题标题】:Publish subscribe with nodejs and redis(node_redis)使用 nodejs 和 redis(node_redis) 发布订阅
【发布时间】:2011-07-05 15:40:38
【问题描述】:

我正在尝试使用 nodejs 和 node_redis 构建一个通用的发布/订阅服务器,它接收来自具有通道名称的浏览器的请求,并使用该通道已发布的任何数据进行响应。为此,我使用来自浏览器的长轮询请求,并通过在通道上收到消息时发送响应来处理这些请求。

对于每个新请求,都会创建一个用于订阅频道的对象(当且仅当它不存在时)。

clients = {};

//when request comes in,
clients[channel] = redis.createClient();
clients[channel].subscribe(channel);

这是处理订阅频道的最佳方式,还是有其他更直观的方式?

【问题讨论】:

标签: node.js redis publish-subscribe


【解决方案1】:

我不知道你的设计是什么,但是你可以用一个redis客户端在多个频道上订阅(你订阅了客户端后,你只能订阅其他频道或在这个连接内取消订阅:http://redis.io/commands/subscribe),因为收到消息后,您将了解该消息来自哪个频道的完整信息。然后您可以将此消息分发给所有感兴趣的客户。

这对我有点帮助,因为我可以将消息类型放在频道名称中,然后从小函数中为每条消息动态选择操作,而不是使用单独的逻辑为每个频道生成单独的订阅。

在我的 node.js 服务器中,我只有 2 个 redis 客户端:

  1. 所有标准操作的简单客户端 - lpushsadd 等等
  2. 订阅客户端 - 通过订阅频道监听消息,然后使用第一个 redis 客户端将此消息分发到所有会话(存储为每个频道类型的集合)。

【讨论】:

  • 我真的很感激这个解决方法,对我来说很及时,谢谢!
【解决方案2】:

我想向您指出我关于使用 socket.io 和 redis 的 pubsub 的帖子。 Socket.io 是一个非常好的库 =>

How to use redis PUBLISH/SUBSCRIBE with nodejs to notify clients when data values change?

我认为设计非常简单,而且应该具有很强的可扩展性。

【讨论】:

  • 我一直在尝试切换到 socket.io(来自长轮询)。唯一的问题是我做这个项目是为了完成我的学士论文,我有点担心学习和实施 socket.io 会导致时间限制。
  • 使用 socket.io io 将节省您的时间,而不是浪费您的时间。 Socket.io 真的很不错!!
【解决方案3】:

对我来说,这似乎是一个非常合理的解决方案。你不喜欢它的什么?

需要记住的是,您可以在每个 Redis 连接上拥有多个订阅。这最终可能会使您的逻辑复杂化,这与您所要求的相反。但是,在规模上,这可能是必要的。每个 Redis 连接都相对便宜,但它确实需要一个文件描述符和一些内存。

【讨论】:

  • 不,我不喜欢它本身,我只是想知道是否有更好的解决方案。例如,仅在一个频道上收听,并使用模式代表不同频道的模式发布和订阅该频道。
  • 当然,您可以使用 psubscribe 订阅通配符频道名称。
【解决方案4】:

完成 Redis Pub/Sub 示例(实时聊天使用 Hapi.js 和 Socket.io)

我们试图了解 Redis Publish/Subscribe ("Pub/Sub") 并且所有现有示例要么已过时,要么过于简单,要么没有测试。 因此,我们使用 Hapi.js + Socket.io + Redis Pub/Sub 示例编写了一个Complete实时聊天和端到端测试

https://github.com/dwyl/hapi-socketio-redis-chat-example

Pub/Sub 组件只有几行 node.js 代码: https://github.com/dwyl/hapi-socketio-redis-chat-example/blob/master/lib/chat.js#L33-L40

我们鼓励您查看/尝试示例,而不是将其粘贴到此处(没有任何上下文)。

我们使用Hapi.js 构建它,但chat.js 文件与Hapi 解耦,并且可以轻松基本一起使用> node.js http服务器express(等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多