Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Redis, Node.js i Socket.io :Uwierzytelnianie między serwerami i zrozumienie node.js

Ok, mam odpowiedź. Trudno mi było to rozgryźć, szukałem godzinami ...

Oto powiązany temat, który pozwolił mi to zadziałać (odpowiedź ORAZ komentarze):

Jak usunąć Redis ze słuchaczy „wiadomości”

A oto mój kod:

io.on('connection', function(client){
    console.log('Client id #'+client.id);

    if (client.handshake.session) {
      var user_socket_channel = client.handshake.session['user_socket_channel'];
    }

    var redis_listener = function(redis_channel, rawdata) {
      console.log('Redis connection on '+redis_channel);
      var data = JSON.parse(rawdata);
      if (data.channel) { var socket_channel = data.channel; }
      else { 
        if (user_socket_channel) { var socket_channel = user_socket_channel; }
        else { var socket_channel = 'public' }
      }
      var rails_data = data.data;
      console.log('Socket.io emiting on ['+socket_channel+']');
      client.emit(socket_channel, rails_data);
    };

    redis_subs.on('message', redis_listener);

    client.on('disconnect', function(){
      console.log('Client disconnect, removing redis listener..');
      redis_subs.removeListener('message', redis_listener);
    });
});

W zależności od kontekstu musisz wywołać redis.removeListener w zdarzeniu io.client.disconnect.

Oto prawdopodobna alternatywa:

https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

Nawiasem mówiąc, to powiązane pytanie wydaje się podobne z dokładną odpowiedzią, ale tak naprawdę nie jest (nie działa). Co więcej, spójrz na wyróżniony komentarz:

Jak ponownie użyć połączenia redis w socket.io?




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Co oznacza kod *((char*)-1) =„x”?

  2. Redis ustawia TTL na klawiszach hSet

  3. Anuluj oferty pracy w Laravel

  4. Jak zrobić podstawowy WATCH za pomocą StackExchange.Redis

  5. Jak połączyć się z instancją Redis z funkcji AWS Lambda?