Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jaka jest najbardziej wydajna biblioteka/metoda komunikacji międzyprocesowej node.js?

Jeśli chcesz wysyłać wiadomości z jednego komputera na drugi i nie zależy Ci na wywołaniach zwrotnych, najlepszym rozwiązaniem jest Redis pub/sub. To naprawdę łatwe do wdrożenia, a Redis jest naprawdę szybki.

Najpierw musisz zainstalować Redis na jednym ze swoich komputerów.

Naprawdę łatwo jest połączyć się z Redis:

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

Ale nie zapomnij o otwarciu portu Redis w zaporze!

Następnie musisz zasubskrybować każdy komputer na jakimś kanale:

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

Możesz pominąć your_namespace i używaj globalnej przestrzeni nazw, ale prędzej czy później pożałujesz.

Wysyłanie wiadomości też jest bardzo łatwe:

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

Jeśli chcesz wysyłać różne rodzaje wiadomości, możesz użyć pmessages zamiast wiadomości:

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

Najlepszą praktyką jest nazywanie procesów (lub maszyn) według ich funkcjonalności (np. 'send_email' ). W takim przypadku proces (lub maszyna) może być subskrybowany do więcej niż jednego kanału, jeśli implementuje więcej niż jedną funkcjonalność.

Właściwie możliwe jest zbudowanie komunikacji dwukierunkowej za pomocą redis. Ale jest to trudniejsze, ponieważ wymagałoby dodania unikalnej nazwy kanału wywołania zwrotnego do każdej wiadomości, aby otrzymać wywołanie zwrotne bez utraty kontekstu.

Mój wniosek jest więc następujący:Użyj Redis, jeśli potrzebujesz komunikacji typu „wyślij i zapomnij”, zbadaj inne rozwiązania, jeśli potrzebujesz pełnej komunikacji dwukierunkowej .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Liczba skanów Redis:jak zmusić funkcję SCAN do zwracania wszystkich kluczy zgodnych ze wzorcem?

  2. Redis pub/sub dla serwera czatu w node.js

  3. Co to jest Express.js?

  4. Używanie Redis do buforowania wyników SQL

  5. Jak uruchomić niestandardowego pracownika RQ w kontenerze Docker (Python, Flask i Redis)