Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Apa pustaka/metode komunikasi antar-proses node.js yang paling efisien?

Jika Anda ingin mengirim pesan dari satu mesin ke mesin lain dan tidak peduli dengan panggilan balik, maka Redis pub/sub adalah solusi terbaik. Penerapannya sangat mudah dan Redis sangat cepat.

Pertama, Anda harus menginstal Redis di salah satu mesin Anda.

Sangat mudah untuk terhubung ke Redis:

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

Tapi jangan lupa untuk membuka port Redis di firewall Anda!

Maka Anda harus berlangganan setiap mesin ke beberapa saluran:

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

Anda dapat melewati your_namespace dan gunakan namespace global, tetapi cepat atau lambat Anda akan menyesalinya.

Mengirim pesan juga sangat mudah:

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

Jika Anda ingin mengirim berbagai jenis pesan, Anda dapat menggunakan pmessages alih-alih pesan:

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

Praktik terbaik adalah memberi nama proses (atau mesin) Anda berdasarkan fungsinya (mis. 'send_email' ). Dalam hal ini, proses (atau mesin) dapat berlangganan lebih dari satu saluran jika mengimplementasikan lebih dari satu fungsi.

Sebenarnya, dimungkinkan untuk membangun komunikasi dua arah menggunakan redis. Tetapi ini lebih rumit karena perlu menambahkan nama saluran panggilan balik yang unik ke setiap pesan untuk menerima panggilan balik tanpa kehilangan konteks.

Jadi, kesimpulan saya adalah ini:Gunakan Redis jika Anda memerlukan komunikasi "kirim dan lupakan", selidiki solusi lain jika Anda memerlukan komunikasi dua arah yang lengkap .



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Membandingkan nomor 64 bit yang ditandatangani menggunakan operasi bitwise 32 bit di Lua

  2. Rekomendasi pustaka klien Redis untuk digunakan dari Scala

  3. Apakah ada cara untuk bekerja dengan sesi tanpa mengunci situs ASP.Net MVC?

  4. Bagaimana saya bisa menghapus semua Instance tipe X di ServiceStack Redis Client

  5. redis cluster terus mencetak log WSA_IO_PENDING