Socket.io-redis एक अर्थ में ट्रैक रखता है..
उनके दस्तावेज़ों से
"रेडिस एडेप्टर इन-मेमोरी एडॉप्टर के प्रसारण कार्य का विस्तार करता है:पैकेट को रेडिस चैनल पर भी प्रकाशित किया जाता है (चैनल नाम के प्रारूप के लिए नीचे देखें)।
प्रत्येक Socket.IO सर्वर इस पैकेट को प्राप्त करता है और इसे कनेक्टेड सॉकेट्स की अपनी सूची में प्रसारित करता है।"
तो मूल रूप से, रेडिस का उपयोग ब्रोकर के रूप में किया जाता है ताकि प्रत्येक सॉकेट सर्वर को एक्स चैनल आदि के आधार पर उत्सर्जन करने के लिए कहा जा सके। आपको क्लस्टर मोड में एक सॉकेट। सिर्फ एक उत्सर्जन के बाहर की चीजों का ट्रैक।
तो यह हमें कहां छोड़ता है .. वैसे आप सॉकेट के माध्यम से कस्टम हुक का उपयोग कर सकते हैं। मुझे लगता है कि socket.io और socket.io redis के नए संस्करण के साथ इसे आसान बनाने के लिए कुछ बदलाव किए गए थे, हालांकि मैंने उन्हें आजमाया नहीं है।
इसके बजाय, हम जो करते हैं वह सॉकेट और उपयोगकर्ताओं की आईडी को स्टोर करने के लिए रेडिस एचसेट और जेगेट का उपयोग करता है, फिर जब हम सभी उपयोगकर्ताओं को ऑनलाइन प्राप्त करना चाहते हैं तो हम ऑनलाइन उपयोगकर्ताओं या किसी विशिष्ट कमरे में उपयोगकर्ताओं की सूची प्राप्त करने के लिए रेडिस को क्वेरी कर सकते हैं।
आप जो करना चाहेंगे वह है रेडिस पैकेज जोड़ना और एडिटॉन में नियमित पब / उप से कनेक्ट करना।
फिर, जब कोई उपयोगकर्ता उस मामले के लिए किसी कमरे या आपके सर्वर से जुड़ता है तो आप एक हेसेट करेंगे। पहले जॉइन पर हमारा कुछ ऐसा दिखता है
redis.hset([collection-name],[Field],[value])
तो कोड में ऐसा दिखता है
redis.hset(decoded.cID,"socket-" + socket.id,socket.nickname)
यह रेडिस में एक मान सेट करेगा, इसलिए संग्रह नाम एक मान है (हमारे लिए यह चैनल की एक अद्वितीय आईडी है) तो हम मूल्य के लिए 'निक-नाम' के साथ फ़ील्ड के लिए 'socket.id' स्टॉक करते हैं। यदि वे लॉग इन नहीं हैं तो यह मान उपयोगकर्ता आईडी या इसका अनाम है
फिर, जब हम यह जानना चाहते हैं कि कमरे में कौन है तो हम hget कमांड का उपयोग करते हैं
redis.HGETALL([collection-name],function(err,results){}
तो एमिट के अंदर, हम एक विशिष्ट संग्रह के अंदर सभी आइटम प्राप्त करने के लिए redis.HGETALL कमांड को कॉल करते हैं, जिसे हम पास करते हैं और सभी जुड़े हुए उपयोगकर्ताओं को वापस भेजते हैं।