我正在使用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
}));