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 .