socket.io-emitter的Redis接口在localhost和heroku + rediscloud上表现不同

时间:2014-10-05 21:36:43

标签: node.js sockets heroku redis socket.io

我正在使用socket.io-emitter将数据从我的节点应用程序推送到客户端。在heroku上我使用(试图)'rediscloud'插件来初始化发射器。我正在使用相同的实例来实现我自己的键/值存储目的。

socket.io-emitter初始化如下所示,与github repo上的示例不同,但记录为有效:

var emitterRedisClient = redis.createClient(port, hostname, 
        {no_ready_check: true, return_buffers: true});
if (config.auth !== null) {
  emitterRedisClient.auth(config.auth.split(':')[1]);
}

var ioe = require('socket.io-emitter');
var emitter = ioe(emitterRedisClient);

以后某处:

emitter.to(clientSocketId).emit('update', data);

^^^这是不起作用的部分。在调试时,我发现emitter.to().emit()使用redis.publish并从发布中接收回调给出:

{err: null, reply: 0}在Heroku上使用redis cloud并且不发送数据
{err: null, reply: 1}在localhost上使用本地redis并发送数据

如果它有帮助,我将它与socket.io实例的socket.io-redis适配器结合使用。这是初始化的:

var pub = redis.createClient(port, hostname, {no_ready_check: true});
var sub = redis.createClient(port, hostname, {no_ready_check: true, detect_buffers: true});
if (config.auth !== null) {
  pub.auth(config.auth.split(':')[1]);
  sub.auth(config.auth.split(':')[1]);
}

var io = require('socket.io').listen(app); // where app is a restify server

io.adapter(redisAdapter({
  pubClient: pub,
  subCliend: sub
}));

0 个答案:

没有答案