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

Коя е най-ефективната библиотека/метод за комуникация между процеси на node.js?

Ако искате да изпращате съобщения от една машина на друга и не се интересувате от обратни повиквания, тогава Redis pub/sub е най-доброто решение. Наистина е лесен за прилагане и Redis е наистина бърз.

Първо трябва да инсталирате Redis на една от вашите машини.

Наистина е лесно да се свържете с Redis:

var client = require('redis').createClient(redis_port, redis_host);

Но не забравяйте да отворите Redis порт във вашата защитна стена!

След това трябва да се абонирате за всяка машина за някакъв канал:

client.on('ready', function() {
  return client.subscribe('your_namespace:machine_name');
});

client.on('message', function(channel, json_message) {
  var message;
  message = JSON.parse(message);
  // do whatever you vant with the message
});

Можете да пропуснете your_namespace и използвайте глобално пространство от имена, но рано или късно ще съжалявате.

Изпращането на съобщения също е наистина лесно:

var send_message = function(machine_name, message) {
  return client.publish("your_namespace:" + machine_name, JSON.stringify(message));
};

Ако искате да изпращате различни видове съобщения, можете да използвате pmessages вместо съобщения:

client.on('ready', function() {
  return client.psubscribe('your_namespace:machine_name:*');
});

client.on('pmessage', function(pattern, channel, json_message) {
  // pattern === 'your_namespace:machine_name:*'
  // channel === 'your_namespace:machine_name:'+message_type
  var message = JSON.parse(message);
  var message_type = channel.split(':')[2];
  // do whatever you want with the message and message_type
});

send_message = function(machine_name, message_type, message) {
  return client.publish([
    'your_namespace',
    machine_name,
    message_type
  ].join(':'), JSON.stringify(message));
};

Най-добрата практика е да наименувате вашите процеси (или машини) според тяхната функционалност (напр. 'send_email' ). В този случай процесът (или машината) може да бъде абониран за повече от един канал, ако изпълнява повече от една функционалност.

Всъщност е възможно да се изгради двупосочна комуникация с помощта на redis. Но е по-трудно, тъй като ще изисква добавяне на уникално име на канал за обратно повикване към всяко съобщение, за да получите обратно повикване, без да губите контекст.

И така, моето заключение е следното:Използвайте Redis, ако имате нужда от комуникация „изпратете и забравите“, проучете други решения, ако имате нужда от пълноценна двупосочна комуникация .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis:Как да получите достъп до регистрационния файл на Redis

  2. Защо KEYS не се препоръчва да се използва в Redis?

  3. Redis набор срещу хеш

  4. Redis - Изтекли индекси не се изтриват

  5. Свържете се с AWS ElastiCache с шифроване при транспортиране + удостоверяване от клиент, различен от redis-cli+stunnel