प्रत्येक सॉकेट को चैनल उपयोगकर्ता आईडी से कनेक्ट करने के लिए एक अधिक सुरुचिपूर्ण समाधान होगा, उदाहरण के लिए:
io.sockets.on('connection', function (socket) {
socket.join(userID);
});
// when you want somebody to send a message to userID you can do:
io.sockets.in(userID).emit(message);
यहां आपको दो बातों का ध्यान रखना होगा:
- सुनिश्चित करें कि केवल userID ही उसके चैनल से जुड़ सकता है, इस प्रकार सत्र को सत्यापित करें (यहां और पढ़ें:http://www.danielbaulig.de/socket-ioexpress/)
- कनेक्शन पर redis में userID के लिए मान बढ़ाएं (ताकि आप जान सकें कि उस उपयोगकर्ता के लिए एक नया कनेक्शन सुन रहा है) और डिस्कनेक्ट करने पर userID मान कम करें (ताकि आप अभी भी सुन रहे कनेक्शन की संख्या जान सकें)। यदि मान 0 है तो आप चैट में एक संदेश भेजते हैं जिसमें कहा गया है कि उपयोगकर्ता आईडी छोड़ दिया है (चूंकि उपयोगकर्ता आईडी चैनल को सुनने वाले कनेक्शन की संख्या 0 है)।
जब अन्य उपयोगकर्ता उपयोगकर्ता आईडी को संदेश भेजना चाहते हैं, तो उन्हें उपयोगकर्ता आईडी चैनल से कनेक्ट करने की आवश्यकता नहीं होती है, वे chat
पर एक संदेश भेज सकते हैं चैनल और उपयोगकर्ता आईडी को एक संपत्ति के रूप में पास करें। उदाहरण के लिए:
var chat = io
.of('/chat')
.on('connection', function (socket) {
// connected to public chat
})
.on('message', function (data) {
if (data.userID && data.message) {
io.sockets.in(userID).emit('UserX: ' + data.message);
}
});