सॉकेट.आईओ 1.0 में एक विशिष्ट आईडी पर संदेश भेजना


85

मैं एक विशिष्ट सॉकेट आईडी पर डेटा भेजना चाहता हूं।

हम पुराने संस्करणों में ऐसा करने में सक्षम थे:

io.sockets.socket(socketid).emit('message', 'for your eyes only');

मैं सॉकेट.आईओ 1.0 में कुछ ऐसा करने के बारे में कैसे जाऊंगा?

जवाबों:


206

सॉकेट.आईओ 1.0 में वे इसके लिए एक बेहतर तरीका प्रदान करते हैं। प्रत्येक सॉकेट स्वचालित रूप से स्वयं आईडी द्वारा एक डिफ़ॉल्ट कमरे में शामिल हो जाता है। दस्तावेजों की जाँच करें: http://socket.io/docs/rooms-and-namespaces/#default-room

तो आप निम्नलिखित कोड के साथ आईडी द्वारा सॉकेट के लिए उत्सर्जन कर सकते हैं:

io.to(socketid).emit('message', 'for your eyes only');

(Room_id) और (user_socket_id) के बीच अंतर है? मैं वास्तव में इसका उपयोग एक कमरे में संदेश भेजने के लिए करता हूं जिसमें एक या अधिक उपयोगकर्ता हो सकते हैं। "इससे अन्य सॉकेट्स को संदेश प्रसारित करना आसान हो जाता है:", फिर एक या अधिक हो सकता है, एक अद्वितीय निजी नहीं।
वाशिंगटन बैटलहो

@WashingtonBotelho, सॉकेट आईडी आमतौर पर "Uj5CRqZ5b_Xubx9sAAAA" जैसी दिखती है, इसलिए सिद्धांत रूप में इस तरह के कमरे में एक से अधिक उपयोगकर्ता हो सकते हैं, लेकिन व्यवहार में मुझे कोई भी जानकारी नहीं है जब मैं किसी उपयोगकर्ता को दूसरे उपयोगकर्ता के निजी कमरे में जोड़ूंगा।
ओलेग

9
हम उनके सॉकेटआईड द्वारा किसी विशिष्ट उपयोगकर्ता की पहचान कैसे कर सकते हैं, क्या इसका मतलब है कि हमें उपयोगकर्ता (जैसे- यूज़रनेम) और सॉकेटआईडी की एक महत्वपूर्ण मूल्य जोड़ी को कहीं स्टोर करने की आवश्यकता है?
साईं

@Mustafa Dokumacı merhaba, bana बीर yardım एट stackoverflow.com/questions/38817680/...
pishguy महदी

यह सिर्फ इतना अस्वाभाविक है ... हमें सॉकेट आईडी नंबर पर एक संदेश भेजने का तरीका क्यों नहीं प्रदान किया गया है और वह यह है? वैसे भी, केवल एक ही काम है जो वास्तव में 2.x पर काम करता है
Adry

94

सॉकेट.आईओ 1.0 में आप निम्न कोड के साथ ऐसा कर सकते हैं:

if (io.sockets.connected[socketid]) {
    io.sockets.connected[socketid].emit('message', 'for your eyes only');
}

अपडेट करें:

@ MustafaDokumacı के उत्तर में एक बेहतर समाधान है।


3
इस उत्तर और इंगित बेहतर उत्तर के बीच का अंतर यह है कि THIS समाधान के साथ, आपके पास कॉलबैक हो सकते हैं जो अच्छा है। लेकिन io.to (सॉकेट) के साथ, आप कॉलबैक का उपयोग नहीं कर सकते।
रमजान पोलाट

17

@Mustafa Dokumacı और @Curious ने पहले से ही पर्याप्त जानकारी प्रदान की है, मैं जोड़ रहा हूं कि आप सॉकेट आईडी कैसे प्राप्त कर सकते हैं।

सॉकेट आईडी का उपयोग करने के लिए socket.id :

var chat = io.of("/socket").on('connection',onSocketConnected);

function onSocketConnected(socket){
   console.log("connected :"+socket.id);  
}

6

यदि आपने एक नाम स्थान का उपयोग किया है, तो मैंने पाया कि निम्नलिखित काम करता है:

//Defining the namespace <br>
var nsp = io.of('/my-namespace');

//targeting the message to socket id <br>
nsp.to(socket id of the intended recipient).emit('private message', 'hello');

नाम स्थान के बारे में अधिक जानकारी: http://socket.io/docs/rooms-and-namespaces/


5

मेरा मानना ​​है कि दोनों @Curious और @ MustafaDokumacı ने समाधान प्रदान किए जो अच्छी तरह से काम करते हैं। हालांकि अंतर यह है कि @ MustafaDokumacı के समाधान के साथ संदेश को एक कमरे में प्रसारित किया जाता है, न कि केवल एक विशेष क्लाइंट को।

जब पावती का अनुरोध किया जाता है तो यह अंतर प्रमुख होता है।

io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});

जबकि उम्मीद के मुताबिक काम करता है

io.to(socketid).emit('message', 'for your eyes only', function(data) {...});

के साथ विफल रहता है

Error: Callbacks are not supported when broadcasting

1

Node.js में -> socket.io -> वहाँ एक चैट उदाहरण है इसे लाइन में पेस्ट करने के लिए डाउनलोड करें (कनेक्शन पर io) भाग .. मैं इस कोड का उपयोग करता हूं जो 100% काम करता है

io.on('connection', function(socket){
  socket.on('chat message', function(msg){
    console.log(socket.id);
    io.to(socket.id).emit('chat message', msg+' you ID is:'+socket.id);
  });
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.