Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Was ist die effizienteste Bibliothek/Methode für die prozessübergreifende Kommunikation von node.js?

Wenn Sie Nachrichten von einem Computer zum anderen senden möchten und sich nicht um Rückrufe kümmern, ist Redis Pub/Sub die beste Lösung. Es ist wirklich einfach zu implementieren und Redis ist wirklich schnell.

Zuerst müssen Sie Redis auf einem Ihrer Rechner installieren.

Es ist wirklich einfach, sich mit Redis zu verbinden:

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

Aber vergessen Sie nicht, den Redis-Port in Ihrer Firewall zu öffnen!

Dann müssen Sie für jede Maschine einen Kanal abonnieren:

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

Sie können your_namespace überspringen und verwenden Sie den globalen Namensraum, aber Sie werden es früher oder später bereuen.

Auch das Versenden von Nachrichten ist ganz einfach:

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

Wenn Sie verschiedene Arten von Nachrichten senden möchten, können Sie anstelle von Nachrichten pmessages verwenden:

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

Am besten benennen Sie Ihre Prozesse (oder Maschinen) nach ihrer Funktionalität (z. B. 'send_email' ). In diesem Fall kann ein Prozess (oder eine Maschine) mehr als einen Kanal abonnieren, wenn er mehr als eine Funktionalität implementiert.

Tatsächlich ist es möglich, mit Redis eine bidirektionale Kommunikation aufzubauen. Aber es ist schwieriger, da es erforderlich wäre, jeder Nachricht einen eindeutigen Callback-Kanalnamen hinzuzufügen, um einen Callback zu erhalten, ohne den Kontext zu verlieren.

Meine Schlussfolgerung lautet also:Verwenden Sie Redis, wenn Sie "Senden und Vergessen"-Kommunikation benötigen, untersuchen Sie andere Lösungen, wenn Sie eine vollwertige bidirektionale Kommunikation benötigen .