Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis, Node.js и Socket.io:кръстосано удостоверяване на сървъри и разбиране на node.js

Добре, имам своя отговор. Трудно ми беше да го разбера, търсех с часове ...

Ето свързаната тема, която ми позволи да я накарам да работи (отговор И коментари):

Как да премахнете Redis от слушателите на „съобщения“

А ето и моя код:

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

В зависимост от контекста, трябва да извикате redis.removeListener на събитие io.client.disconnect.

Ето една вероятна алтернатива:

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

Между другото, този свързан въпрос изглежда подобен с точен отговор, но всъщност не е (не работи). Още повече, вижте маркирания коментар:

Как да използвам повторно Redis връзка в socket.io?




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis Cheat Sheet за оптимизация на паметта

  2. Как да накарам Redis да работи на Azure?

  3. Изчакайте обратно извикване на асинхронна функция в последното събитие stream.on('data').

  4. Използването на многопроцесорния пул от задачата celery поражда изключение

  5. Ефективен начин за картографиране на данни от Redis