sql >> Databasteknik >  >> NoSQL >> Redis

Redis, Node.js och Socket.io:Korsserverautentisering och förståelse för node.js

Ok, jag har mitt svar. Jag hade svårt att komma på det, letade i timmar ...

Här är det relaterade ämnet som gjorde att jag kunde få det att fungera (svar OCH kommentarer):

Hur man tar bort Redis på "meddelande"-lyssnare

Och här är min 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);
    });
});

Beroende på sammanhanget måste du anropa redis.removeListener på io.client.disconnect-händelsen.

Här är ett troligt alternativ:

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

Förresten verkar den här relaterade frågan vara en liknande med ett korrekt svar, men är det faktiskt inte (fungerade inte). Ytterligare mer, titta på den markerade kommentaren:

Hur återanvänder man redis-anslutning i socket.io?




  1. Python-redis keys() returnerar en lista med byteobjekt istället för strängar

  2. Twisted:varför är det så att om du skickar en uppskjuten återuppringning till en uppskjuten tråd så blockeras tråden helt plötsligt?

  3. Avinstallera Redis på Mac OSX. Äldre version körs efter installation av uppdatering

  4. MongoDB:Kombinera data från flera samlingar till en..hur?