Redis
 sql >> Database >  >> NoSQL >> Redis

Qual è la libreria/metodo di comunicazione interprocesso node.js più efficiente?

Se vuoi inviare messaggi da una macchina all'altra e non ti interessano le richiamate, Redis pub/sub è la soluzione migliore. È davvero facile da implementare e Redis è davvero veloce.

Per prima cosa devi installare Redis su una delle tue macchine.

È davvero facile connettersi a Redis:

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

Ma non dimenticare di aprire la porta Redis nel tuo firewall!

Quindi devi iscrivere ogni macchina a qualche canale:

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

Puoi saltare your_namespace e usa lo spazio dei nomi globale, ma prima o poi te ne pentirai.

È davvero facile anche inviare messaggi:

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

Se vuoi inviare diversi tipi di messaggi, puoi usare pmessages invece dei messaggi:

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 migliore pratica è nominare i tuoi processi (o macchine) in base alla loro funzionalità (ad es. 'send_email' ). In tal caso il processo (o la macchina) può essere iscritto a più di un canale se implementa più di una funzionalità.

In realtà, è possibile costruire una comunicazione bidirezionale utilizzando redis. Ma è più complicato poiché richiederebbe l'aggiunta di un nome univoco del canale di richiamata a ciascun messaggio per ricevere la richiamata senza perdere il contesto.

Quindi, la mia conclusione è questa:Usa Redis se hai bisogno di una comunicazione "invia e dimentica", studia altre soluzioni se hai bisogno di una comunicazione bidirezionale a tutti gli effetti .