आप बस इस
0,123,516 तरह जाँच कर सकते हैंio.sockets.adapter.rooms['roomId']
यह आपको एसआईडी के साथ एक वस्तु देता है उदा।
{"1sEAEIZeuMgdhF35AAAA":true}
अपडेट विशिष्ट संस्करणों में:
1।4:
io.sockets.adapter.rooms['roomId']
1.3.x:
io.adapter.rooms['roomId'];
अपडेट::
हालांकि एक जाँच कर सकते हैं सॉकेट आईडी
io.sockets.adapter.rooms['roomId'];
1.0.x 1.2.x करने के लिए दिए गए कमरे में है या ऊपर वर्णित एक पंक्ति के साथ नहीं है अगर सर्वर आर्किटेक्चर में एकल नोड सर्वर है/एकल नोड प्रक्रिया।
यदि आप multi-node server का उपयोग कर रहे हैं, यानी लोड संतुलित के साथ अलग नोड प्रक्रिया।
यहां ध्यान दें कि सॉकेट केवल उस प्रक्रिया पर पंजीकृत हैं जो उन्होंने पहले कनेक्ट किया था। इसलिए, आपको अपने सभी नोड्स को ईवेंट सिंक करने के लिए socket.io-redis का उपयोग करने की आवश्यकता है, और मल्टी नोड में सॉकेट आईडी की सूची को बनाए रखने के लिए आप क्या कर सकते हैं, प्रत्येक बार क्लाइंट कनेक्ट/डिस्कनेक्ट होने पर एक ईवेंट प्रसारित करता है, ताकि प्रत्येक नोड & बनाए रखता है सभी ग्राहकों/सॉकेट आईडी की वास्तविक समय सूची।
पृष्ठभूमि/विवरण:
redis एडाप्टर base adapter फैली हुई है, लेकिन यह केवल overrides/adds the following properties:
ग्राहकों प्रसारण जोड़ने डेल delAll
निम्नलिखित कोड के साथ:
io.sockets.adapter.rooms["roomId"]; //Any of the above examples specific to versions mentioned above
आप हैं socket.io-redis एडाप्टर पर कमरे की संपत्ति पूछताछ। यह रेडिस एडाप्टर द्वारा ओवरराइड नहीं किया गया था, इसलिए आप वास्तव में बेस एडेप्टर से पूछताछ कर रहे हैं, जो केवल वर्तमान प्रक्रिया में कमरे/ग्राहकों के बारे में जानता है।
रेडिस एडाप्टर कमरे की संपत्ति को ओवरराइड क्यों नहीं किया? हो सकता है क्योंकि इस संपत्ति के हर एक्सेस पर सभी कमरों और कनेक्शन वाले ऑब्जेक्ट को बनाने के लिए इसे रेडिस डेटाबेस इंस्टेंस से पूछना होगा। अच्छा विचार नहीं?
तो इस लेखन जवाब के रूप में आप इस तरह एक विधि के साथ एडाप्टर ही है कि कार्यक्षमता जोड़ने के लिए होगा:
/**
* One-Line code/property to check if the socket id is in given room.
*
* @param {String} room id
* @param {Function} callback (optional)
* @api public
*/
Redis.prototype.isSidExistsInRoom = function(room, fn){ ... }
जहां redis डेटाबेस उदाहरण मारा जाएगा।
यह लागू करने के लिए सभी अन्य एडाप्टर के लिए बेस एडाप्टर इंटरफ़ेस का हिस्सा होना चाहिए। यह एक आम समस्या है जब सभी एक दिन का सामना करेंगे, जब वे अपने सर्वर स्केल करेंगे;)
पीएस किसी अन्य दृष्टिकोण पर बस एक संकेत है कि सॉकेट.io-redis 3.1.0 में customRequest/customHook विधियों का उपयोग करना है।
ver 5.2.0 के साथ अद्यतन: (प्रासंगिक बहु नोड सर्वर)
अब redis अनुकूलक आप 5.2 के रूप में भर में प्रक्रियाओं/नोड्स कमरे देता है।0
स्रोत:
RedisAdapter#clients(rooms:Array, fn:Function)
सभी नोड्स भर में उपलब्ध से जुड़े ग्राहक ID की सूची देता है। देखें Namespace#clients(fn:Function)
io.of('/').adapter.clients((err, clients) => {
console.log(clients); // an array containing all connected socket ids
});
io.of('/').adapter.clients(['room1', 'room2'], (err, clients) => {
console.log(clients); // an array containing socket ids in 'room1' and/or 'room2'
});
// you can also use
io.in('room3').clients((err, clients) => {
console.log(clients); // an array containing socket ids in 'room3'
});
मुबारक कोडिंग!
इसे आज़माएं 'अगर (_। है (io.sockets.adapter.rooms [RoomId], socket.id)) ' –
इसे भी देखें: https://stackoverflow.com/questions/19044660/socket-io -जेट-रूम-जो-सॉकेट-वर्तमान में – PallavBakshi