2016-03-17 4 views
6

मैं वेबआरटीसी का उपयोग कर पीयर कनेक्शन एप्लिकेशन में अपना पहला सहकर्मी लिख रहा हूं, और मेरे कोड को सहकर्मी से बर्फ उम्मीदवार से अनुरोध करने के लिए, जो मैं सॉकेट.ओ कनेक्शन पर भेजता हूं, एक बार के बजाय 6 बार ट्रिगर कर रहा है।मेरा बर्फ उम्मीदवार अनुरोध 1 के बजाय 6 बार फायरिंग क्यों कर रहा है?

यह वास्तव में भ्रमित है क्योंकि अगर मैंने गलती से एक बड़ा अनुरोध लूप तैयार किया था, तो मैं केवल 6 (8 onicecandidate घटनाओं) के असीमित रिकर्सन की अपेक्षा करता हूं। तो क्या कोई मुझे बता सकता है कि फॉलो कोड ने 6 रिकर्सन क्यों किए?

यहाँ संदेश हैंडलर है, यह बस वाक्य रचना के द्वारा नियंत्रित एक socket.io संदेश भेजता है: Muveoo.Messenger.input('ice candidate request', data);

'ice candidate request' : function(data) { 
    console.log('Debug 10: Requesting Ice Candidate'); 
    socket.emit('ice candidate request', data); 
}, 

और यहाँ कोड है कि बर्फ उम्मीदवार अनुरोध हैंडल, न पर if तर्क द्वारा भी भ्रमित हो रहा है बहुत ऊपर, यूआईडी यह तय करने के लिए कि प्रत्येक ग्राहक को शुरुआत में कौन सा प्रस्ताव देना चाहिए, केवल एक अद्वितीय आईडी है।

[Debug A]: Offering Connection 
rtc.js:94 [Debug A]: onicecandidate Event Triggered. 
rtc.js:101 [Debug A]: Sending Ice Candidate Request. 
messenger.js:91 Debug 10: Requesting Ice Candidate 
rtc.js:94 [Debug A]: onicecandidate Event Triggered. 
rtc.js:101 [Debug A]: Sending Ice Candidate Request. 
messenger.js:91 Debug 10: Requesting Ice Candidate 
rtc.js:94 [Debug A]: onicecandidate Event Triggered. 
rtc.js:101 [Debug A]: Sending Ice Candidate Request. 
messenger.js:91 Debug 10: Requesting Ice Candidate 
rtc.js:94 [Debug A]: onicecandidate Event Triggered. 
rtc.js:101 [Debug A]: Sending Ice Candidate Request. 
messenger.js:91 Debug 10: Requesting Ice Candidate 
rtc.js:94 [Debug A]: onicecandidate Event Triggered. 
rtc.js:101 [Debug A]: Sending Ice Candidate Request. 
messenger.js:91 Debug 10: Requesting Ice Candidate 
rtc.js:94 [Debug A]: onicecandidate Event Triggered. 
rtc.js:94 [Debug A]: onicecandidate Event Triggered. 
rtc.js:101 [Debug A]: Sending Ice Candidate Request. 
messenger.js:91 Debug 10: Requesting Ice Candidate 
rtc.js:94 [Debug A]: onicecandidate Event Triggered. 

क्यों मेरी आइस उम्मीदवार अनुरोध फायरिंग कर रहा है 6 के बजाय बार 1:

if (Muveoo.RTC.connectedPeers[id].dataChannels[name].UID < Muveoo.RTC.connectedPeers[id].dataChannels[name].peerUID) { 
    Muveoo.RTC.connectedPeers[id].dataChannels[name].offerConnection(function() { 
     console.log('[Debug A]: Offering Connection'); 
     Muveoo.RTC.connectedPeers[id].dataChannels[name].pc.onicecandidate = function(evt) { 
      console.log('[Debug A]: onicecandidate Event Triggered.'); 
      if (evt.candidate) { 
       console.log('[Debug A]: Sending Ice Candidate Request.'); 
       Muveoo.Messenger.input('ice candidate request', { 
        target : id, 
        candidate : evt.candidate, 
        channel : name 
       }); 
      } 
     }; 
     Muveoo.RTC.connectedPeers[id].dataChannels[name].pc.ondatachannel = function(evt) { 
      console.log('got data channel'); 
      Muveoo.RTC.connectedPeers[id].dataChannels[name] = evt.channel; 
      Muveoo.RTC.connectedPeers[id].dataChannels[name].channel.onmessage = function(evt1) { 
       handleMessage(evt1.data); 

      }; 
      Muveoo.RTC.connectedPeers[id].dataChannels[name].channel.message = function(msg) { 
       Muveoo.RTC.connectedPeers[id].dataChannels[name].channel.send(JSON.stringify(msg)); 
      }; 
     }; 
     socket.on('session description', function(data) { 
      console.log('Debug 12: Session Description Received'); 
      Muveoo.RTC.connectedPeers[data.target].dataChannels[data.channel].desc = new Muveoo.RTC.connectedPeers[data.target].dataChannels[data.channel].sessionDescription(msg.desc); 
      Muveoo.RTC.connectedPeers[data.target].dataChannels[data.channel].pc.setRemoteDescription(Muveoo.RTC.connectedPeers[data.target].dataChannels[data.name].desc); 
      if (Muveoo.RTC.connectedPeers[data.target].dataChannels[data.channel].UID > Muveoo.RTC.connectedPeers[data.target].dataChannels[data.channel].peerUID) { 
       /*They sent the sessionDescription first, so need an answer*/ 
       Muveoo.RTC.connectedPeers[data.target].dataChannels[data.channel].pc.createAnswer(function(answer) { 
        /*The answer is this side's local description*/ 
        Muveoo.RTC.connectedPeers[data.target].dataChannels[data.channel].pc.setLocalDescription(answer); 
        var data = { 
         target : data.target, 
         description : answer, 
         channel : data.channel 
        }; 
        socket.emit('session description', data); 
       }); 
      } 
     }); 
    }); 
} 

और यहाँ दिखाने के लिए क्या हो रहा है जिसके परिणामस्वरूप लॉग है?

+0

उम्मीद है कि यह बहुत भ्रमित नहीं है लेकिन मेरा नेमस्पेस डिज़ाइन विभिन्न मॉड्यूल में एक्सपोजर की पेशकश करते हुए कई उम्मीदवारों के बीच कई कनेक्शनों की अनुमति देने के लिए है, 'Muveoo.RTC.connectedPeers [id] .dataChannels [name] '- आईडी बस एक अद्वितीय संदर्भित करता है वर्तमान सत्र में जुड़े प्रत्येक क्लाइंट को निर्दिष्ट आईडी, और 'वीडियो' और' ऑडियो 'डेटा चैनल नाम हैं। मुझे पता है कि यह परिवर्तनीय गोपनीयता के लिए बुरा है लेकिन मैं एप्लिकेशन का एकमात्र डेवलपर हूं, इसलिए फिलहाल परिवर्तनीय गोपनीयता मेरा ध्यान नहीं है। । –

उत्तर

0

वे अनुरोध नहीं कर रहे हैं। आप कई आईसीई उम्मीदवारों को भेजने के लिए ज़िम्मेदार हैं WebRTC सिग्नलिंग की अपनी पसंद के माध्यम से अन्य सहकर्मी को उत्पन्न करता है।

इस डिजाइन मिलने बर्फ कहा जाता है, और सभी उम्मीदवारों का इंतजार किए नहीं द्वारा बातचीत को गति अग्रिम पाया जा सकता है और प्रस्ताव/उत्तर है, जो सेकंड लग सकता है, इसलिए जल्द से जल्द इन संदेशों को भेजने के लिए कृपया में प्रत्यारोपित किया, के रूप में यह पूरा बिंदु है (आपको पहले से ही आग से स्थानीय रूप से प्रस्ताव/उत्तर भेजना चाहिए था, यानी setLocalDescription की सफलता कॉलबैक के बाद)।

प्रत्येक उम्मीदवार एक आईपी + पोर्ट है जो आपके स्थानीय ग्राहक पर पहुंचा जा सकता है।

आप कोई इंटरनेट के साथ एक स्थानीय लैन पर वीडियो केवल (कोई ऑडियो) भेज रहे हैं (या आप किसी भी STUN या मोड़ सर्वर को निर्दिष्ट नहीं कर रहे हैं), तो आप दो मेजबान देखेंगे केवल उम्मीदवारों, एक के लिए प्रत्येक दिशा। जैसे

candidate:0 1 UDP 2133252543 192.168.1.5 58078 typ host 
candidate:0 2 UDP 2133252542 192.168.1.5 51446 typ host 

आप एक STUN सर्वर जोड़ने, तो आप अतिरिक्त सर्वर कर्मकर्त्ता उम्मीदवारों देखेंगे, अर्थात कि कैसे आप अपने फ़ायरवॉल के बाहर से पहुंचा जा सकता है।

candidate:1 1 UDP 1686032863 69.102.28.57 60453 typ srflx 
candidate:1 2 UDP 1686032862 69.102.28.57 62432 typ srflx 

अंत में, यदि आप एक मोड़ सर्वर जोड़ने, तो आप भी रिले उम्मीदवारों, जो एक मोड़ सर्वर जो (यदि एक अंतिम उपाय के रूप में अपने डेटा रिले जाएगा रहे हैं देखेंगे साथियों के बीच कोई सीधा संबंध नहीं पाया जा सकता है):

candidate:2 1 UDP 1153102742 12.202.18.33 71321 typ relay 
candidate:2 2 UDP 1153102741 12.202.18.33 71432 typ relay 

इसमें ऑडियो जोड़ें, और उम्मीदवारों की संख्या दोगुना हो।

यहां प्रयोग करने के लिए a fiddle है।

संबंधित मुद्दे