我正在使用socket.io实时发布文章,
流正在实时更新,但问题是,redis订阅多次发生,而post在流中多次出现。
我正在使用node.js cluster module创建多个节点集群。这是密码,
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订阅,这样我就可以将它们在套接字中发送到用户的流中一次。
发布于 2014-04-26 10:23:06
您需要为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
}));https://stackoverflow.com/questions/23220034
复制相似问题