2011-11-02 33 views
1

我使用socket.io和Redis以及node.js - 下面的代碼。使用redis與socket.io - 如何更新每個客戶端?

我在這裏肯定很愚蠢,但我不明白爲什麼Redis事件只會與第一個連接的用戶激發。

我再次爲每個打開頁面的用戶看到NEW CONNECTION控制檯消息,但我只看到第一個用戶的REDIS控制檯消息。

io = io.listen(app); 
client.flushall(); 
io.sockets.on('connection', function (socket) { 

    // Update Redis with information about this connection. 
    console.log('*************** NEW CONNECTION'); 
    client.multi() 
     .hmset("user:" + user_id, "nickname", nick) 
     .sadd("chatroom:" + room_id, user_id) 
     .exec(); 

    // Check that the Redis record was set. 
    client.smembers("chatroom:" + room_id, function (err, data) { 
      if (err) { console.log(err); return; } 
      console.log('REDIS CALL FOR chatroom:' + room_id, data); 
    }); 
}); 

我是否需要爲每個客戶建立內部io.sockets.on一個單獨的Redis實例 - 如果是這樣,將這個規模有多大?

否則,我做錯了什麼?

+0

也許你會阻止redis連接? – thejh

+1

風格提示:您可以替換'if(err){console.log(err);返回; }'用'if(err)return console.log(err);' – thejh

+0

@thejh謝謝:) – Richard

回答

4

Got it!我很愚蠢。

我在socket.on('disconnect'...)的內部調用client.quit() - 這明顯是刪除了Redis客戶端。 DUH。

無論如何,希望這有助於未來的其他人。