sql >> Databáze >  >> NoSQL >> Redis

Redis, Node.js a Socket.io:Ověřování napříč servery a porozumění node.js

Dobře, mám odpověď. Bylo pro mě těžké na to přijít, hledal jsem hodiny ...

Zde je související téma, které mi umožnilo, aby to fungovalo (odpověď A komentáře):

Jak odstranit Redis na posluchačích zpráv

A tady je můj kód:

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

V závislosti na kontextu musíte zavolat redis.removeListener na události io.client.disconnect.

Zde je pravděpodobná alternativa:

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

Mimochodem tato související otázka se zdá podobná s přesnou odpovědí, ale ve skutečnosti není (nefungovala). Dále se podívejte na zvýrazněný komentář:

Jak znovu použít připojení redis v socket.io?




  1. Node.js Kue, jak restartovat neúspěšné úlohy

  2. $unset je prázdný. Musíte zadat pole takto:{$unset:{<pole>:...}}

  3. Přineste si své vlastní účty Azure – Hosting pro MongoDB® &Redis™ na ScaleGrid

  4. Jak mohu používat clustery Node.js se svou jednoduchou aplikací Express?