0

私は小さな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);
  });
});

ここでは、特定のクライアントが別の部屋にサブスクライブされている問題に関心があります。そのため、各ソケット接続内でsub Redis変数も使用しています。各クライアントは別の部屋にサブスクライブでき、メッセージを受信できるためです。そこから。上記のコードが問題ないかどうかは完全にはわかりません。Socket.IO接続内でサブRedis接続を定義する以外に何かする必要がある場合はお知らせください。これは、それぞれに新しいRedis接続が生成されることも意味します。購読している部屋からメッセージを提供するために接続しているクライアント?これはかなりのオーバーヘッドだと思いますが、とにかく解決したいと思いますか?

ありがとうございました

4

1 に答える 1

0

node.js と redis は両方とも、多数の接続を処理するのに非常に優れているため (数千でも問題ありません)、あなたがしていることは問題ありません。

補足として、何千もの接続をサポートする予定がある場合は、ファイル記述子の制限を引き上げることを検討する必要があります。

于 2013-01-09T20:59:11.447 に答える