Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Redis Pub Sub:设计模式_Node.js_Sockets_Redis_Socket.io_Publish Subscribe - Fatal编程技术网

Node.js Redis Pub Sub:设计模式

Node.js Redis Pub Sub:设计模式,node.js,sockets,redis,socket.io,publish-subscribe,Node.js,Sockets,Redis,Socket.io,Publish Subscribe,我们使用套接字i/o处理大量实时数据。用户使用套接字发送/接收数据。当我们使用负载平衡器时,我们不能使用套接字i/o的名称空间模型,而是在套接字中使用redis的pub/sub 到目前为止,我们正在为每个频道的每个用户的订阅创建一个单独的redis连接。但最近我们在redis上遇到了一个最大连接数的问题(Error:Ready check failed:ERR max number of clients reacted),我们发现这是因为通过pub-sub的redis连接太多 为了应对这种情况,

我们使用套接字i/o处理大量实时数据。用户使用套接字发送/接收数据。当我们使用负载平衡器时,我们不能使用套接字i/o的名称空间模型,而是在套接字中使用redis的pub/sub

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

为了应对这种情况,我突然想到,与其每个用户使用多个subscribe redis连接,为什么不使用一个publish redis连接和一个subscribe redis连接,这两个连接将侦听所有频道,并且可以通过以下方式实现:

var pub = redis.createClient();
var sub = redis.createClient();
sub.psubscribe('*');
sub
将收听所有频道。此外,我们还可以在套接字对象中存储有关用户订阅的频道的信息,并相应地处理数据


希望我对问题陈述很清楚,并且想了解使用此设计模式的性能如何?

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

sub.psubscribe('someprefix_*');
顺便说一句,如果您的问题是在多个NodeJS实例的上下文中广播到socket.io,您可以检查此模块:


它利用redis提供socket.io的大规模、多节点体验。从性能上看,使用单个连接要好得多,对redis服务器的压力小得多,并且在发布数据时,它不必在所有连接之间循环。 “模式”确实会产生一些开销,但可以忽略不计,请确保更具体地描述您的模式,您将来可能会在该服务器上发布其他事件

sub.psubscribe('someprefix_*');
顺便说一句,如果您的问题是在多个NodeJS实例的上下文中广播到socket.io,您可以检查此模块:

它利用redis提供socket.io的大规模多节点体验