Redis
 sql >> Base de données >  >> NoSQL >> Redis

Quelle est la bibliothèque/méthode de communication inter-processus node.js la plus efficace ?

Si vous souhaitez envoyer des messages d'une machine à une autre et que vous ne vous souciez pas des rappels, Redis pub/sub est la meilleure solution. C'est vraiment facile à mettre en œuvre et Redis est vraiment rapide.

Vous devez d'abord installer Redis sur l'une de vos machines.

C'est vraiment facile de se connecter à Redis :

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

Mais n'oubliez pas d'ouvrir le port Redis dans votre pare-feu !

Ensuite, vous devez abonner chaque machine à une chaîne :

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

Vous pouvez ignorer your_namespace et utilisez l'espace de noms global, mais vous le regretterez tôt ou tard.

Il est également très facile d'envoyer des messages :

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

Si vous souhaitez envoyer différents types de messages, vous pouvez utiliser pmessages au lieu de messages :

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

La meilleure pratique consiste à nommer vos processus (ou machines) en fonction de leur fonctionnalité (par exemple, 'send_email' ). Dans ce cas, le processus (ou la machine) peut être abonné à plusieurs canaux s'il implémente plusieurs fonctionnalités.

En fait, il est possible de construire une communication bidirectionnelle en utilisant redis. Mais c'est plus délicat car il faudrait ajouter un nom de canal de rappel unique à chaque message afin de recevoir le rappel sans perdre le contexte.

Donc, ma conclusion est la suivante :Utilisez Redis si vous avez besoin d'une communication "envoyer et oublier", recherchez d'autres solutions si vous avez besoin d'une communication bidirectionnelle à part entière .