Socket.io डिफ़ॉल्ट रूप से मेमोरीस्टोर का उपयोग करता है, इसलिए सभी कनेक्टेड क्लाइंट को मेमोरी में संग्रहीत किया जाएगा, जिससे किसी भिन्न सॉकेट.io सर्वर से जुड़े क्लाइंट से ईवेंट भेजना और प्राप्त करना असंभव हो जाता है। पी>
सभी socket.io सर्वर को सभी ईवेंट प्राप्त करने का एक तरीका यह है कि सभी सर्वर रेडिस के पब-सब का उपयोग करते हैं। इसलिए, socket.emit का उपयोग करने के बजाय कोई redis पर प्रकाशित कर सकता है।
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
और सभी सॉकेट सर्वर रेडिस के माध्यम से उस चैनल की सदस्यता लेते हैं और एक संदेश प्राप्त करने पर उनसे जुड़े ग्राहकों को भेज देते हैं।
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
जटिल सामान !! लेकिन रुकिए, पता चलता है कि लक्ष्य प्राप्त करने के लिए आपको वास्तव में इस प्रकार के कोड की आवश्यकता नहीं है। Socket.io में RedisStore है जो अनिवार्य रूप से वही करता है जो ऊपर दिए गए कोड को एक अच्छे तरीके से करना चाहिए ताकि आप Socket.io कोड लिख सकें जैसा कि आप एक सर्वर के लिए लिखेंगे और फिर भी अन्य सॉकेट.आईओ सर्वर पर प्रचारित हो जाएंगे। रेडिस।
सॉकेट को सारांशित करने के लिए। io मेमोरी के बजाय चैनल के रूप में रेडिस का उपयोग करके कई सर्वरों पर संदेश भेजता है।