sql >> Database >  >> NoSQL >> Redis

Redis, Node.js en Socket.io:Cross-server authenticatie en node.js begrip

Oké, ik heb mijn antwoord. Ik vond het moeilijk om erachter te komen, ben al uren op zoek ...

Hier is het gerelateerde onderwerp waardoor ik het kon laten werken (antwoord EN opmerkingen):

Hoe Redis te verwijderen op 'bericht' luisteraars

En hier is mijn code:

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);
    });
});

Afhankelijk van de context, moet je redis.removeListener aanroepen op de io.client.disconnect-gebeurtenis.

Hier is een waarschijnlijk alternatief:

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

Trouwens, deze gerelateerde vraag lijkt een vergelijkbare vraag met een nauwkeurig antwoord, maar is het niet (werkte niet). Kijk verder naar de gemarkeerde opmerking:

Hoe de redis-verbinding in socket.io opnieuw te gebruiken?




  1. Waarom heeft Mongoose zowel schema's als modellen?

  2. Voorbeeld om socket.io-redis . te gebruiken

  3. Hoe verwijder je in mongoDb een array-element door zijn index?

  4. Node mangoest zoekquery in lus werkt niet