gpt4 book ai didi

node.js - Redis 在使用 Node Cluster、Socket.io 时多次订阅

转载 作者:IT王子 更新时间:2023-10-29 06:07:50 25 4
gpt4 key购买 nike

我正在使用 socket.io 进行实时发布,

Stream 正在实时更新,但问题是 redis 订阅发生了多次,并且该帖子在流中出现了多次。

我正在使用 node.js 集群模块 创建多个 Node 集群。这是代码,

worker.js

var cluster    = require('cluster');
var server = new Hapi.Server(config.port,view_options);

var socketIO = require('socket.io');
var redis = require("socket.io/node_modules/redis");
var RedisStore = require('socket.io/lib/stores/redis');

var io = socketIO.listen(server.listener);
var sub = redis.createClient();
sub.setMaxListeners(0);

io.configure(function() {
io.set('store', new RedisStore({
redisSub : sub
}));
io.set('transports', ['xhr-polling']);
io.set('polling duration', '10');
});

if (cluster.isMaster) {
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
}
else {
sub.subscribe("userstreams");
io.sockets.on('connection', function(socket) {
// Realtime streams : subscribe to redis channel userstreams
sub.on("message", function(channel, member_postid) {
console.info("-----------realtime post receieved --------",member_postid);
});
});
}

publisher.js

// head
var redis = require("socket.io/node_modules/redis");
var pub = redis.createClient();
// inside a function
pst = member + "::" + data.pid
pub.publish("userstreams", pst);

客户端仅发布一次 postID,但我在服务器的 userstreams channel 中获得多个订阅。

我希望我的服务器只获得一次 redis 订阅,这样我就可以在套接字中将它们发送到用户的流中一次。

最佳答案

你需要为socket.io配置pub、sub和client:

var pub = redis.createClient();
var sub = redis.createClient();
var client = redis.createClient();

并将它们传递给 socket.io

io.set('store', new io.RedisStore({
redisSub : sub,
redisPub: pub,
redisClient: client
}));

关于node.js - Redis 在使用 Node Cluster、Socket.io 时多次订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23220034/

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