使用nodejs和redis进行发布订阅(node_redis)

2023-12-29

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

对于每个新请求,都会创建一个对象来订阅通道(当且仅当该对象尚不存在时)。

clients = {};

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

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


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

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

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

  1. 所有标准操作的简单客户端 -lpush, sadd等等
  2. 订阅客户端 - 通过订阅的通道侦听消息,然后使用第一个 redis 客户端将该消息分发到所有会话(针对每个通道类型存储为集合)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用nodejs和redis进行发布订阅(node_redis) 的相关文章

随机推荐