दिलचस्प पोस्ट
पदावनत आकार के लिए प्रतिस्थापनफ़ोथफॉन्ट: IOS 7 में? स्पष्ट कैश के साथ window.location.reload मैं UIView की एक स्क्रीन शॉट कैसे लूूं? जेडीओ दृढ़ता प्रबंधक का उपयोग कैसे करें? स्ट्रिंग को जावास्क्रिप्ट में चर नाम में कनवर्ट करें एएलएसएसईट यूआरएल आईओएस से वीडियो एनएसडीटा प्राप्त करें यूनिट परीक्षण फ़ाइल I / O Processbuilder प्रक्रिया के लिए jProgress बार का उपयोग कैसे करें? दशमलव अंकों के साथ संख्यात्मक मान दर्ज करने का सबसे अच्छा तरीका क्या है? ऑब्जेक्ट के साथ में कैसे पहुंचें … साथ समाप्त करें PHP में session_unset () और session_destroy () के बीच अंतर क्या है? किसी अन्य प्रोजेक्ट में स्प्रिंग बूट जार के लिए निर्भरता कैसे जोड़ें? अपाचे HTTP क्लाइंट को एक पुनर्निर्देशन के बाद से कैसे रोकें? प्रतिनिधियों और घटनाओं के बीच अंतर क्या हैं? जावास्क्रिप्ट: विराम सेटटिमेउट ();

किसी विशेष क्लाइंट को socket.io के साथ संदेश कैसे भेजें

मैं socket.io + node.js से शुरू कर रहा हूँ, मुझे पता है कि स्थानीय रूप से एक संदेश भेजने के लिए और socket.broadcast.emit() फ़ंक्शन को प्रसारित करने के लिए: – सभी जुड़े ग्राहकों को एक ही संदेश प्राप्त होता है।

अब, मैं जानना चाहूंगा कि किसी विशेष ग्राहक को निजी संदेश कैसे भेजा जाए, मेरा मतलब है कि 2 व्यक्ति (क्लाइंट-टू-क्लाइंट स्ट्रीम) के बीच एक निजी बातचीत के लिए एक सॉकेट है। धन्यवाद।

Solutions Collecting From Web of "किसी विशेष क्लाइंट को socket.io के साथ संदेश कैसे भेजें"

जब कोई उपयोगकर्ता कनेक्ट हो जाता है, तो उसे एक उपयोगकर्ता नाम के साथ एक संदेश भेजना चाहिए, जो कि एक ईमेल की तरह अद्वितीय होना चाहिए।

उपयोगकर्ता नाम और सॉकेट की एक जोड़ी इस प्रकार एक ऑब्जेक्ट में संग्रहीत की जानी चाहिए:

 var users = { 'userA@example.com': [socket object], 'userB@example.com': [socket object], 'userC@example.com': [socket object] } 

क्लाइंट पर, निम्न डेटा के साथ एक ऑब्जेक्ट को सर्वर पर फेंकना:

 { to:[the other receiver's username as a string], from:[the person who sent the message as string], message:[the message to be sent as string] } 

सर्वर पर, संदेशों के लिए सुनो। जब कोई संदेश प्राप्त होता है, तो डेटा को रिसीवर से निकाला जाता है

 users[data.to].emit('receivedMessage', data) 

क्लाइंट पर, 'प्राप्त मेसेज' नामक सर्वर से निकलते हैं, और डेटा को पढ़ने से आप यह देख सकते हैं कि यह कौन से आया था और जो संदेश भेजा गया था

आप socket.io कमरे का उपयोग कर सकते हैं। क्लाइंट साइड से किसी भी अनन्य पहचानकर्ता (ईमेल, आईडी) के साथ एक घटना (इस मामले में "शामिल", कुछ भी हो सकता है) का उत्सर्जन करता है।

ग्राहक की ओर:

 var socket = io.connect('http://localhost'); socket.emit('join', {email: user1@example.com}); 

अब, सर्वर साइड से उस उपयोगकर्ता के लिए एक अनूठे कमरा बनाने की जानकारी का उपयोग किया जाता है

सर्वर साइड:

 var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.on('join', function (data) { socket.join(data.email); // We are using room of socket io }); }); 

इसलिए, अब हर उपयोगकर्ता उपयोगकर्ता के ईमेल के नाम पर एक कमरे में जुड़ गया है। इसलिए यदि आप एक विशिष्ट उपयोगकर्ता को एक संदेश भेजना चाहते हैं तो आपको बस इतना करना होगा

सर्वर साइड:

 io.sockets.in('user1@example.com').emit('new_msg', {msg: 'hello'}); 

क्लाइंट की ओर से आखिरी चीज को छोड़ दिया गया है "new_msg" ईवेंट को सुनना

ग्राहक की ओर:

 socket.on("new_msg", function(data) { alert(data.msg); } 

मुझे आशा है कि आपको यह विचार मिलेगा।

सुनिश्चित करें: बस,

यह वही चीज़ है जिसकी आपको आवश्यकता है :

 io.to(socket.id).emit("event", data); 

जब भी कोई उपयोगकर्ता सर्वर से जुड़ता है, आईडी सहित सॉकेट विवरण उत्पन्न किया जाएगा। यह आईडी वास्तव में विशेष लोगों को संदेश भेजने में मदद करता है।

पहले हमें सरणी में सभी socket.ids को संग्रहित करने की आवश्यकता है,

 var people={}; people[name] = socket.id; 

यहां नाम रिसीवर का नाम है। उदाहरण:

 people["ccccc"]=2387423cjhgfwerwer23; 

इसलिए, अब जब हम संदेश भेज रहे हैं तो रिसेट के नाम से उस सॉकेट.आईडी प्राप्त कर सकते हैं।

इसके लिए हमें रिसीवरनाम नाम जानना होगा। आपको रिसीवर नाम सर्वर से निकालने की आवश्यकता है।

अंतिम बात यह है:

  socket.on('chat message', function(data){ io.to(people[data.reciever]).emit('chat message', data.msg); }); 

आशा है कि यह आपके लिए अच्छी तरह से काम करता है। !!

आप socket.io कमरे का उल्लेख कर सकते हैं। जब आप सॉकेट को हाथ से निकालते हैं – उदाहरण के लिए, "उपयोगकर्ता। # {Userid}" नाम से उसके नाम पर आप जुड़ सकते हैं।

उसके बाद, आप किसी भी ग्राहक को सुविधाजनक नाम से निजी संदेश भेज सकते हैं, उदाहरण के लिए:

io.sockets.in ('user.125')। emit ('new_message', {text: "हैलो वर्ल्ड"})

उपर्युक्त ऑपरेशन में हम "new_message" को उपयोगकर्ता "125" भेजते हैं।

धन्यवाद।

हमारी कंपनी के एक प्रोजेक्ट में हम "कमरे" दृष्टिकोण का उपयोग कर रहे हैं और यह नाम एक अद्वितीय पहचानकर्ता (हमारे कार्यान्वयन फेसबुक मैसेंजर की तरह अधिक है) के रूप में बातचीत में सभी उपयोगकर्ताओं के उपयोगकर्ता आईडी का संयोजन है, उदाहरण:

| आईडी | नाम | 1 | स्कॉट | 2 | सुसान

"कमरा" नाम "1-2" होगा (आईसीएस का आदेश दिया जाता है।) और डिस्कनेक्ट करें socket.io पर स्वचालित रूप से कमरे को साफ करता है

इस तरह से आप उस कमरे में और केवल ऑनलाइन (जुड़े) उपयोगकर्ताओं (कम सर्वर पर भेजे गए पैकेज) के लिए संदेश भेजते हैं।