Redis在使用节点群集Socket.io时多次订阅

我正在使用socket.io实时发帖,

stream正在更新实时,但问题是多次redis订阅发生,并在post中出现多次。

我正在使用node.js cluster module来创build多个节点集群。 这里是代码,

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通道中获得了多个订阅。

我希望我的服务器只获得一次redis订阅,这样我就可以只将它们发送到一个用户的数据stream一次。

你需要为socket.ioconfigurationpub,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 }));