用nodejs和redis发布订阅(node_redis)

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

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

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

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

这对我来说似乎是一个相当合理的解决scheme。 你不喜欢这个吗?

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

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

这对我有点帮助,因为我可以在通道名称中放入消息types,然后从小函数中为每条消息dynamicselect操作,而不是为每个通道分别生成单独的逻辑订阅。

在我的node.js服务器里面,我只有两个redis客户端:

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

我想指出你对我的post关于pubsub使用socket.io和redis。 Socket.io是一个很好的库=>

如何使用redis的PUBLISH / SUBSCRIBE和nodejs在数据值改变时通知客户端?

我认为devise是非常简单的,它也应该是非常可扩展的。

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

我们试图了解Redis发布/订阅(“ Pub / Sub ”),所有现有的例子都已经过时,过于简单或者没有testing。 因此,我们使用Hapi.js + Socket.io + Redis Pub / Sub示例进行完整的实时聊天,并进行了端到端testing

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

构建状态 测试覆盖率 守则气候 依赖状态 devDependency状态

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

我们build议您结帐/尝试示例,而不是在此粘贴( 没有任何上下文 )。

我们使用Hapi.js来构build它,但是chat.js文件是从Hapi中分离出来的,并且可以很容易地用于一个基本的 node.js http服务器或者express (等等)