sql >> Databáze >  >> NoSQL >> Redis

Jaká je nejúčinnější knihovna/metoda meziprocesové komunikace node.js?

Pokud chcete posílat zprávy z jednoho počítače na druhý a nestaráte se o zpětná volání, pak je Redis pub/sub tím nejlepším řešením. Je to opravdu snadné implementovat a Redis je opravdu rychlý.

Nejprve musíte nainstalovat Redis na jeden ze svých počítačů.

Je opravdu snadné se připojit k Redis:

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

Ale nezapomeňte otevřít port Redis ve vašem firewallu!

Potom musíte každý stroj přihlásit k odběru některého kanálu:

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 můžete přeskočit a používat globální jmenný prostor, ale dříve nebo později toho budete litovat.

Odesílání zpráv je také velmi snadné:

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

Pokud chcete posílat různé druhy zpráv, můžete místo zpráv použít zprávy p:

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

Nejlepším postupem je pojmenovat procesy (nebo stroje) podle jejich funkcí (např. 'send_email' ). V takovém případě může být proces (nebo stroj) přihlášen k odběru více než jednoho kanálu, pokud implementuje více než jednu funkcionalitu.

Ve skutečnosti je možné vytvořit obousměrnou komunikaci pomocí redis. Ale je to složitější, protože ke každé zprávě by bylo potřeba přidat jedinečný název kanálu zpětného volání, aby bylo možné přijímat zpětné volání bez ztráty kontextu.

Můj závěr je tedy tento:Pokud potřebujete komunikaci „odeslat a zapomenout“, použijte Redis, pokud potřebujete plnohodnotnou obousměrnou komunikaci, prozkoumejte další řešení .



  1. Měli byste povolit žurnálování MongoDB?

  2. Redis:Závodní stav a jeden závit

  3. Plánování celerových úkolů s velkým ETA

  4. MongoDB $substrCP