Signatur
Beschreibung
Die schreibgeschützte Eigenschaft responsesSent des Wörterbuchs RTCIceCandidatePairStats zählt, wie viele STUN-Antworten auf Verbindungsprüfungen (Binding Responses) der lokale ICE-Agent bisher über die Verbindung dieses Kandidatenpaars gesendet hat. Jede Antwort ist die Reaktion auf eine Prüfanfrage (Binding Request), die von der Gegenseite eingegangen ist.
Zusammen mit requestsReceived zeigt der Wert, ob die Gegenstelle das Paar aktiv prüft und ob der lokale Agent darauf antwortet. Vergleicht man ihn mit requestsSent und responsesReceived derselben Statistik, lässt sich die Konnektivität in beide Richtungen bewerten. Das ist hilfreich, wenn man einseitige Verbindungsprobleme sucht, etwa durch NAT, Firewalls oder falsch eingerichtete TURN-Server.
Die Statistik bekommt man über RTCPeerConnection.getStats(). Im zurückgegebenen RTCStatsReport hat jeder Eintrag vom Typ "candidate-pair" diese Eigenschaft. Da der Zähler nur anwächst, ist er gut geeignet, um in regelmäßigen Abständen Differenzen zu berechnen.
Rückgabewert
Beispiele
Gesendete STUN-Antworten aller Kandidatenpaare ausgeben
const pc = new RTCPeerConnection();
// ... Signalisierung und Verbindungsaufbau ...
const logResponses = async () => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === 'candidate-pair') {
console.log(`Paar ${stats.id}: ${stats.responsesSent ?? 0} Antworten gesendet`);
}
});
};
await logResponses();
Nur das aktive (nominierte) Kandidatenpaar prüfen
const getActivePair = async (pc) => {
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type === 'candidate-pair' && stats.nominated && stats.state === 'succeeded') {
return stats;
}
}
return null;
};
const pair = await getActivePair(pc);
if (pair) {
console.log('Anfragen empfangen:', pair.requestsReceived);
console.log('Antworten gesendet:', pair.responsesSent);
}
Einseitige Konnektivitätsprobleme erkennen
const diagnose = async (pc) => {
const report = await pc.getStats();
report.forEach((s) => {
if (s.type !== 'candidate-pair') return;
const eingehendOk = s.requestsReceived > 0 && s.responsesSent > 0;
const ausgehendOk = s.requestsSent > 0 && s.responsesReceived > 0;
if (eingehendOk && !ausgehendOk) {
console.warn(`${s.id}: Gegenseite erreicht uns, unsere Prüfungen bleiben unbeantwortet`);
}
});
};
// Alle 5 Sekunden prüfen
const timer = setInterval(() => diagnose(pc), 5000);
pc.addEventListener('connectionstatechange', () => {
if (pc.connectionState === 'closed') clearInterval(timer);
});
// Wichtig · Fallstricke
- Der Wert ist ein kumulativer Zähler ab der Erstellung des Kandidatenpaars. Wer eine Rate haben will, muss die Differenz zwischen zwei
getStats()-Aufrufen berechnen. - Unterstützung und Genauigkeit sind je nach Browser unterschiedlich. Ältere Versionen liefern die Eigenschaft womöglich nicht, deshalb am besten mit
?? 0absichern. - Ein Wert kleiner als
requestsReceivedkann bedeuten, dass eingehende Anfragen verworfen wurden, zum Beispiel wegen fehlerhafter Authentifizierung (ICE-Zugangsdaten). - Antworten auf Consent-Freshness-Prüfungen (RFC 7675) werden ebenfalls gezählt. Der Wert steigt deshalb auch bei stabiler Verbindung weiter an.
- Die Eigenschaft ist nur über
RTCPeerConnection.getStats()erreichbar. Einen eigenen Konstruktor fürRTCIceCandidatePairStatsgibt es nicht.