Io.sockets.emit और प्रसारण के बीच क्या अंतर है?


98

Io.sockets.emit और socket.broadcast.emit के बीच क्या अंतर है? क्या केवल यह प्रसारित होता है कि हर कोई इसे भेजने वाले सॉकेट का उत्सर्जन करता है?

ऐसा लगता है कि वे परस्पर उपयोग किया जा सकता है:

io.sockets.on('connection', function (socket) {
  //these should do the same thing  
  io.sockets.emit('this', { receivers: 'everyone'});

  socket.broadcast.emit('this', { receivers: 'everyone but socket'}); //emits to everyone but socket
  socket.emit('this', { receivers: 'socket'}); //emits to socket
});

जवाबों:


174

io.sockets.emit सभी ग्राहकों को भेज देंगे

socket.broadcast.emit नए बनाए गए कनेक्शन को छोड़कर अन्य सभी क्लाइंट को संदेश भेजेगा

यह सॉकेट.आईओ विकी पोस्ट सभी को इस प्रश्न को पढ़ने में मदद करेगा:


22
अच्छी तरह से पता लगाने के लिए शूटिंग की 3 घंटे की परेशानी हुई।
पेट्रोगैड

मैं यह सत्यापित कर सकता हूं कि यह वास्तव में व्यवहार है, लेकिन मैं गितुब डॉक्स में socket.broadcast और न ही socket.broadcast.emit के लिए कोई दस्तावेज नहीं देख सकता और न ही Socket.io वेबसाइट पर । क्या मैं कुछ भूल रहा हूँ? (और विकी चला गया है)
scipilot

1
इसके बारे में "बेहतर" यह भी है कि उदाहरण "चैट" एप्लिकेशन लगभग अनन्य उपयोग करता है socket.broadcast.emitजबकि एपीआई को कभी भी कहीं भी प्रलेखित नहीं किया जाता है।
एवी चेरी

@Sobiaholic मैंने अभी भी वर्तमान कनेक्शन में परिवर्तन का उत्सर्जन नहीं करने के लिए स्पष्ट कारण का सामना नहीं किया है। क्या यह तब होता है जब पहले से ही घटना को ट्रिगर करने वाले ग्राहक ने अग्रिम में एक आशावादी अद्यतन किया था?
निक पिनेडा

2
यह "नए बनाए गए कनेक्शनों को छोड़कर" नहीं है, यह "खुद को छोड़कर अन्य सभी ग्राहकों के लिए" होना चाहिए। आपके पास एक नया बनाया गया कनेक्शन (चैट रूम में शामिल होने वाला ग्राहक) हो सकता है और आप एक संदेश भेजकर socket.broadcast.emitउसका उपयोग कर सकते हैं और वे इसे प्राप्त करेंगे, लेकिन आपको नहीं।
NiCk Newman

47

socket.broadcast.emit()के समान व्यवहार करता है io.sockets.emit, लेकिन सभी कनेक्टेड सॉकेट्स के लिए उत्सर्जित करने के बजाय यह सभी कनेक्टेड सॉकेट के लिए उत्सर्जित करेगा, सिवाय इसके कि इसे कहा जा रहा है। तो इस मामले में द्वारा संदर्भित सॉकेट socketघटना को प्राप्त नहीं करेगा।


6
एक और अपडेट - जयंता के जवाब और मेरे स्वयं के विश्लेषण के अनुसार, यह नए बनाए गए कनेक्शनों के लिए भी नहीं है, जो 'सॉकेट' बनने के बाद बनाए गए नए क्लाइंट कनेक्शनों के लिए है। यह एक महत्वपूर्ण और महत्वपूर्ण अंतर है !!
अनमोल सराफ

6
"नव निर्मित कनेक्शन" जयंता को संदर्भित करता है सॉकेट जिसका कनेक्शन घटना को संभाला जा रहा है और जो प्रसारण जारी करेगा। प्रसारण की बात यह है कि यह 'ब्रॉडकास्टिंग' सॉकेट को छोड़कर हर क्लाइंट के पास जाता है - क्लाइंट कनेक्शन स्थापित किए जाने के क्रम में कोई फर्क नहीं पड़ता है।
अर्धविराम

8

परिदृश्य: 1: - io.sockets.emit के उपयोग द्वारा विस्तृत चित्र: -io.sockets.emit

यहां हर सॉकेट को इनिशिएटिव सहित मैसेज मिलता है ।

  // BY IO>SOCKETS>EMIT
   io.sockets.emit('MyChannelBroadcast',
               {
                 owner:"Anshu Ashish",
                 clientCount:clients,
                 message:"Welcome All"
               }
    );

परिदृश्य: 2: - socket.broadcast.emit के उपयोग से विस्तृत चित्र: -socket.broadcast.emit

यहां हर सॉकेट्स को एक को छोड़कर संदेश मिल रहा है यानी पहल

    // BY SOCKET>BROADCAST>EMIT
   socket.broadcast.emit('BroadCastExceptMe',{data:"HAVE A NICE DAY"});

निष्कर्ष: - अब यह पूरी तरह से हमारी व्यावसायिक आवश्यकता पर निर्भर करेगा कि कौन सा बेहतर होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.