यदि आप एक मशीन से दूसरी मशीन पर संदेश भेजना चाहते हैं और कॉलबैक की परवाह नहीं करते हैं तो रेडिस पब/सब सबसे अच्छा समाधान है। इसे लागू करना वास्तव में आसान है और रेडिस वास्तव में तेज़ है।
सबसे पहले आपको अपनी एक मशीन पर Redis इंस्टॉल करना होगा।
Redis से जुड़ना वाकई आसान है:
var client = require('redis').createClient(redis_port, redis_host);
लेकिन अपने फ़ायरवॉल में Redis पोर्ट खोलना न भूलें!
फिर आपको प्रत्येक मशीन को किसी न किसी चैनल की सदस्यता लेनी होगी:
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
skip छोड़ सकते हैं और वैश्विक नामस्थान का उपयोग करें, लेकिन आपको जल्द या बाद में इसका पछतावा होगा।
संदेश भेजना भी वास्तव में आसान है:
var send_message = function(machine_name, message) {
return client.publish("your_namespace:" + machine_name, JSON.stringify(message));
};
यदि आप विभिन्न प्रकार के संदेश भेजना चाहते हैं, तो आप संदेशों के बजाय pmessages का उपयोग कर सकते हैं:
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));
};
अपनी प्रक्रियाओं (या मशीनों) को उनकी कार्यक्षमता (उदा. 'send_email'
के आधार पर नाम देना सबसे अच्छा अभ्यास है। ) उस स्थिति में प्रक्रिया (या मशीन) को एक से अधिक चैनलों के लिए सब्सक्राइब किया जा सकता है यदि यह एक से अधिक कार्यक्षमता को लागू करता है।
दरअसल, रेडिस का उपयोग करके द्वि-दिशात्मक संचार बनाना संभव है। लेकिन यह और भी मुश्किल है क्योंकि इसे बिना संदर्भ खोए कॉलबैक प्राप्त करने के लिए प्रत्येक संदेश में अद्वितीय कॉलबैक चैनल नाम जोड़ने की आवश्यकता होगी।
तो, मेरा निष्कर्ष यह है:यदि आपको "भेजें और भूल जाएं" संचार की आवश्यकता है तो रेडिस का उपयोग करें, यदि आपको पूर्ण द्वि-दिशात्मक संचार की आवश्यकता है तो अन्य समाधानों की जांच करें ।