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

Hvad er den mest effektive node.js inter-proces kommunikationsbibliotek/metode?

Hvis du vil sende beskeder fra en maskine til en anden og er ligeglad med tilbagekald, så er Redis pub/sub den bedste løsning. Det er virkelig nemt at implementere, og Redis er virkelig hurtigt.

Først skal du installere Redis på en af ​​dine maskiner.

Det er virkelig nemt at oprette forbindelse til Redis:

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

Men glem ikke at åbne Redis-porten i din firewall!

Så skal du abonnere på hver maskine på en eller anden kanal:

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

Du kan springe your_namespace over og brug globalt navneområde, men du vil fortryde det før eller siden.

Det er også rigtig nemt at sende beskeder:

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

Hvis du vil sende forskellige slags beskeder, kan du bruge p-beskeder i stedet for beskeder:

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

Den bedste praksis er at navngive dine processer (eller maskiner) efter deres funktionalitet (f.eks. 'send_email' ). I så fald kan processen (eller maskinen) abonnere på mere end én kanal, hvis den implementerer mere end én funktionalitet.

Faktisk er det muligt at bygge en tovejskommunikation ved hjælp af redis. Men det er mere vanskeligt, da det ville kræve at tilføje et unikt tilbagekaldskanalnavn til hver besked for at modtage tilbagekald uden at miste kontekst.

Så min konklusion er denne:Brug Redis, hvis du har brug for "send og glem"-kommunikation, undersøg en anden løsning, hvis du har brug for fuldgyldig tovejskommunikation .



  1. Argumenter, der sendes ind, skal være en streng på 24 hex-tegn - det tror jeg, det er

  2. Sådan implementerer du multitenancy til Redis i springstøvler

  3. Sådan indstilles featureCompatibilityVersion i MongoDB

  4. Tjek om et felt indeholder en streng