Piszę moją pierwszą aplikację do połączeń peer-to-peer za pomocą WebRTC, a mój kod, aby zażądać kandydata na lód od peera, który wysyłam przez połączenie socket.io, uruchamia się 6 razy zamiast raz.Dlaczego moje żądanie kandydata na lód jest wykonywane 6 razy zamiast 1?
To jest bardzo mylące, ponieważ gdybym błędnie zaprojektował dużą pętlę żądania, oczekiwałbym nieskończonej liczby rekursji, a nie tylko 6 (8 onicecandidate
zdarzeń). Czy ktoś może mi powiedzieć, dlaczego poniższy kod wygenerował 6 rekursji?
Oto obsługi wiadomości, to po prostu wysyła wiadomość socket.io kontrolowane przez składnię: 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);
},
A oto kod, który obsługuje żądanie Ice Candidate, Nie należy mylić przez logikę if
u bardzo bliskie, UID jest po prostu unikalnym identyfikatorem przypisanym do każdego klienta, aby zdecydować, kto powinien początkowo przedstawić ofertę.
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);
});
}
});
});
}
A oto wynikowe logi aby pokazać, co się dzieje:
[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.
Dlaczego moja prośba Ice Kandydat strzelające 6 razy zamiast 1?
Mam nadzieję, że to nie jest zbyt mylące, ale mój projekt przestrzeni nazw ma na celu umożliwienie wielu połączeń między wieloma kandydatami, jednocześnie oferując ekspozycję w różnych modułach, 'Muveoo.RTC.connectedPeers [id] .dataChannels [name]' - id odnosi się tylko do unikalnego Identyfikator przypisany każdemu klientowi podłączonemu w bieżącej sesji i istnieją nazwy kanałów danych wideo "wideo" i "audio". Wiem, że to źle wpływa na zmienną prywatność, ale jestem jedynym programistą aplikacji, więc zmienna prywatność nie jest w tym momencie moim celem. . –