sql >> Databasteknik >  >> NoSQL >> Redis

Vad är det mest effektiva kommunikationsbiblioteket/metoden för node.js mellan processer?

Om du vill skicka meddelanden från en maskin till en annan och inte bryr dig om återuppringningar så är Redis pub/sub den bästa lösningen. Det är väldigt enkelt att implementera och Redis är riktigt snabbt.

Först måste du installera Redis på en av dina maskiner.

Det är verkligen lätt att ansluta till Redis:

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

Men glöm inte att öppna Redis-porten i din brandvägg!

Sedan måste du prenumerera varje maskin på någon 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 hoppa över your_namespace och använd globalt namnutrymme, men du kommer att ångra dig förr eller senare.

Det är väldigt enkelt att skicka meddelanden också:

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

Om du vill skicka olika typer av meddelanden kan du använda pmeddelanden istället för meddelanden:

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

Det bästa är att namnge dina processer (eller maskiner) efter deras funktionalitet (t.ex. 'send_email' ). I så fall kan processen (eller maskinen) prenumereras på mer än en kanal om den implementerar mer än en funktionalitet.

Egentligen är det möjligt att bygga en dubbelriktad kommunikation med redis. Men det är mer knepigt eftersom det skulle kräva att du lägger till ett unikt namn på återuppringningskanal till varje meddelande för att ta emot återuppringning utan att förlora sammanhanget.

Så, min slutsats är denna:Använd Redis om du behöver "skicka och glöm" kommunikation, undersök en annan lösning om du behöver fullfjädrad dubbelriktad kommunikation .



  1. Anslut till AWS ElastiCache med In-Transit Encryption

  2. Dela sessioner mellan php och nod

  3. Hur lagrar Trello data i MongoDB? (Insamling per tavla?)

  4. ActionCable på AWS:Fel under WebSocket-handskakning:Oväntad svarskod:404