Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

Socket.io एकाधिक सर्वरों पर संदेश कैसे भेजता है?

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 मेमोरी के बजाय चैनल के रूप में रेडिस का उपयोग करके कई सर्वरों पर संदेश भेजता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. एक ही कार्य को कई बार निष्पादित किया गया

  2. ElasticBeanstalk EC2 Fails से Redis (ElastiCache) से कनेक्शन

  3. रेडिस हैश बहुत धीमी गति से लेखन गति

  4. Redis में मेमोरी उपयोग का विश्लेषण और अनुकूलन कैसे करें

  5. हरोकू सीडर स्टैक पर रेस्क्यू कार्यकर्ता के समाप्त होने के बाद भी वर्कर काउंट मौजूद है