gpt4 book ai didi

node.js - Redis 发布订阅 : Design pattern

转载 作者:可可西里 更新时间:2023-11-01 10:55:27 24 4
gpt4 key购买 nike

我们正在使用 socket i/o 处理大量实时数据。用户使用套接字发送/接收数据。由于我们正在使用负载均衡器,因此我们不能使用套接字 i/o 的命名空间模型,而是在套接字中使用 redis 的 pub/sub。

到目前为止,我们为每个用户每个 channel 的订阅创建了一个单独的 redis 连接。但最近我们遇到了 redis 上达到最大连接数的问题(Error: Ready check failed: ERR max number of clients reached),我们发现这是因为通过 pub 有太多的 redis 连接子。

为了解决这个问题,我想到,与其为每个用户使用多个订阅 Redis 连接,不如有一个发布 Redis 连接和一个订阅 Redis 连接,它们将监听所有 channel ,并且可以通过以下方式实现:

var pub = redis.createClient();
var sub = redis.createClient();
sub.psubscribe('*');

sub 将监听所有 channel 。此外,我们可以将有关用户订阅的 channel 的信息存储在套接字对象中,并相应地处理数据。

希望我清楚问题陈述并想了解使用这种设计模式的性能如何?

最佳答案

在性能方面,使用单个连接要好得多,它对 redis 服务器的压力要小得多,并且在发布数据时,它不必遍历所有连接。“模式”确实会产生一些开销,但可以忽略不计,请确保您的模式更加具体,您将来可能会在该服务器上发布其他事件。

sub.psubscribe('someprefix_*');

顺便说一句,如果您的问题是在多个 NodeJS 实例的上下文中广播到 socket.io,您可以查看此模块:https://github.com/socketio/socket.io-redis

它利用 redis 为 socket.io 提供可扩展的多 Node 体验

关于node.js - Redis 发布订阅 : Design pattern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43658072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com