Redis - Pub / Sub Internals

时间:2013-01-09 20:55:53

标签: database node.js redis socket.io

我写了一个小的Socket.IO服务器,工作正常,我可以连接到它,我可以发送/接收消息,所以一切正常。这里只是代码的相关部分:

var RedisStore = require('socket.io/lib/stores/redis');
const pub = redis.createClient('127.0.0.1', 6379);
const sub = redis.createClient('127.0.0.1', 6379);
const store = redis.createClient('127.0.0.1', 6379); 

io.configure(function() {
  io.set('store', new RedisStore({
    redisPub    : pub, 
    redisSub    : sub, 
    redisClient : store
  }));
});

io.sockets.on('connection', function(socket) {
 socket.on('message', function(msg) {
    pub.publish("lobby", msg);
  });


  /*
   * Subscribe to the lobby and receive messages.
   */
  var sub = redis.createClient('127.0.0.1', 6379);
  sub.subscribe("lobby");
  sub.on('message', function(channel, msg) {
    socket.send(msg);
  });
});

在这里,我对某个客户端订阅不同房间的问题感兴趣,这就是我在每个套接字连接中也使用子Redis变量的原因:因为每个客户端都可以订阅不同的房间,可以从那里接收消息。我不完全确定上面的代码是否正常,所以请告诉我是否需要做除了在Socket.IO连接中定义子Redis连接以外的任何事情:这也意味着为每个连接生成一个新的Redis连接客户端连接从子房间提供他的消息?我想这是一个很大的开销,所以我想尽可能地解决它?

谢谢

1 个答案:

答案 0 :(得分:0)

node.js和redis都非常善于处理大量连接(数千个没问题),所以你正在做的很好。

作为旁注,如果您打算支持数千个连接,则需要考虑提高文件描述符限制。