我正在尝试使用nodejs和node_redis构建一个通用的发布/订阅服务器,该服务器接收带有通道名称的浏览器的请求,并以该通道也已发布的任何数据作为响应。为此,我使用了来自浏览器的长轮询请求,并通过在通道上收到消息时发送响应来处理这些请求。
对于每个新请求,都会创建一个对象来订阅该频道(如果且仅当该频道不存在时)。
clients = {}; //when request comes in, clients[channel] = redis.createClient(); clients[channel].subscribe(channel);
这是处理订阅渠道的最佳方法,还是还有其他更直观的方法?
对我来说,这似乎是一个非常合理的解决方案。您对此不满意吗?
请记住,每个Redis连接上可以有多个订阅。这可能最终会使您的逻辑复杂化,这与您要的相反。但是,这可能是必要的。每个Redis连接都相对便宜,但确实需要一个文件描述符和一些内存。