【问题标题】:Pipe Redis publish to a socket? Node.js管道 Redis 发布到套接字?节点.js
【发布时间】:2013-12-09 22:19:33
【问题描述】:

我正在构建一个应用程序,服务器偶尔会在给定通道上发布数据:

redisClient.publish('global-channel', data);

客户端需要能够连接到服务器并收听全局广播。这种方法有什么问题吗?具体来说,为每个socket连接创建一个redisClient?

io.sockets.on('connection', function(socket){
  var socketRedis = redis.createClient();
  socketRedis.subscribe('global-channel');

  socketRedis.on('message', function(ch, msg){
    socket.emit('event', msg);
  });
});

我是 Node、Redis 和 socket.io 的新手...仍在学习哪个部分应该处理某些任务以及在哪里(服务器端与客户端)——谢谢!

【问题讨论】:

  • redis 客户端有没有事件监听功能(订阅,开启)?
  • 是的,它有效......只是看看这种方法是否有更好的方法/潜在问题
  • 有趣,我没有意识到这一点。

标签: node.js redis socket.io


【解决方案1】:

是的,有更好的方法:

var socketRedis = redis.createClient();
// Subscribe to the channel only one time
socketRedis.subscribe('global-channel');

// Accept any connection you want from socket.io
io.sockets.on('connection', function(socket){
  // Do what you want here
});

// Add only one listener to the channel and broadcast
// the message to everyone connect on socket.io
socketRedis.on('message', function(ch, msg){
  io.sockets.emit('event', msg);
});

【讨论】:

  • 谢谢你——(我不是在修辞上问这个问题,b/c我真的不知道)——但这不是关于是否更好依赖的整个辩论在 socket.io 或 Redis 上向客户进行大规模通信?例如,Redis 允许更大的可扩展性 b/c 它不直接依赖于客户端-网络服务器连接?
  • 发现另一个与此相关的问题(Redis vs. Socket.io):stackoverflow.com/questions/10167206/… ... 查看第一个答案
  • 是的,第一个答案实现类似于我给你的代码。每个 socket.io 进程将处理一组用户,并将从 Redis 发布的每条消息转发给每个用户。
猜你喜欢
  • 1970-01-01
  • 2017-02-04
  • 2012-12-15
  • 2015-09-12
  • 2016-12-13
  • 2022-01-06
  • 2018-09-03
  • 2018-02-24
相关资源
最近更新 更多