Start · Sprachen · JavaScript · Referenz · RTCIceCandidatePairStats.requestsSent

RTCIceCandidatePairStats.requestsSent

Eigenschaft

Gesamtzahl der STUN-Konnektivitätsprüfungsanfragen, die über dieses ICE-Kandidatenpaar bisher gesendet wurden (ohne Wiederholungen).

seit JavaScript Baseline: Chrome, Edge, Firefox, Safari (WebRTC St Kategorie: webapi

Signatur

RTCIceCandidatePairStats.requestsSent

Beschreibung

Die Eigenschaft requestsSent eines RTCIceCandidatePairStats-Objekts gibt an, wie viele STUN-Konnektivitätsprüfungen (Binding Requests) der lokale ICE-Agent bisher über das beschriebene Kandidatenpaar gesendet hat. Man erhält das Objekt über RTCPeerConnection.getStats() als Eintrag mit type === "candidate-pair".

ICE sendet solche Anfragen zunächst während der Verbindungsaufbau-Phase, um zu prüfen, ob ein Paar funktioniert, und danach regelmäßig als Consent Freshness-Prüfungen, um die Verbindung am Leben zu halten. Der Zähler wächst also auch bei einer bestehenden Verbindung weiter.

Typische Einsatzzwecke sind Diagnose und Monitoring: Stellt man requestsSent den Werten responsesReceived und requestsReceived gegenüber, erkennt man, ob Prüfungen verloren gehen (z. B. durch Firewalls oder NAT-Probleme). Wiederholte Übertragungen derselben Anfrage (Retransmissions) werden laut Spezifikation nicht mitgezählt, sondern separat in requestsSent-unabhängigen Feldern wie retransmissionsSent erfasst (sofern unterstützt).

Rückgabewert

Typ
number
Beschreibung
Nicht-negative Ganzzahl (unsigned long long) mit der Anzahl gesendeter STUN-Konnektivitätsprüfungsanfragen. Kann undefined sein, wenn der Browser das Feld nicht liefert.

Beispiele

requestsSent für alle Kandidatenpaare ausgeben

const logRequests = async (pc) => {
  const report = await pc.getStats();
  report.forEach((stats) => {
    if (stats.type === 'candidate-pair') {
      console.log(`${stats.id}: ${stats.requestsSent ?? 0} Anfragen gesendet, Zustand: ${stats.state}`);
    }
  });
};

// Aufruf, z. B. nach Verbindungsaufbau
// await logRequests(peerConnection);
CP1a2b3c: 14 Anfragen gesendet, Zustand: succeeded

Antwortquote des aktiven Paares berechnen

const getCheckSuccessRate = async (pc) => {
  const report = await pc.getStats();
  let pair;
  report.forEach((s) => {
    // aktives Paar über den Transport ermitteln
    if (s.type === 'transport' && s.selectedCandidatePairId) {
      pair = report.get(s.selectedCandidatePairId);
    }
  });
  if (!pair || !pair.requestsSent) return null;
  const rate = pair.responsesReceived / pair.requestsSent;
  return Math.round(rate * 100);
};

const rate = await getCheckSuccessRate(peerConnection);
console.log(rate === null ? 'Keine Daten' : `Antwortquote: ${rate} %`);
Antwortquote: 100 %

Verlorene Konnektivitätsprüfungen periodisch überwachen

const monitorIceChecks = (pc, intervalMs = 5000) => {
  let last = new Map();
  const timer = setInterval(async () => {
    const report = await pc.getStats();
    report.forEach((s) => {
      if (s.type !== 'candidate-pair' || !s.nominated) return;
      const prev = last.get(s.id) ?? { sent: 0, recv: 0 };
      const sentDelta = (s.requestsSent ?? 0) - prev.sent;
      const recvDelta = (s.responsesReceived ?? 0) - prev.recv;
      if (sentDelta > 0 && recvDelta === 0) {
        console.warn(`Paar ${s.id}: ${sentDelta} Prüfungen ohne Antwort`);
      }
      last.set(s.id, { sent: s.requestsSent ?? 0, recv: s.responsesReceived ?? 0 });
    });
  }, intervalMs);
  return () => clearInterval(timer);
};

const stop = monitorIceChecks(peerConnection);
// später: stop();
Paar CP9f8e7d: 3 Prüfungen ohne Antwort

// Wichtig · Fallstricke

  • Kumulativer Zähler: Der Wert zählt seit Beginn der Verbindung hoch. Für Raten oder Verlustquoten immer Differenzen zwischen zwei getStats()-Aufrufen bilden.
  • Retransmissions nicht enthalten: Wiederholte Sendungen derselben Anfrage fließen nicht ein; daher kann responsesReceived trotz Paketverlust nahe an requestsSent liegen.
  • Consent-Prüfungen: Auch nach erfolgreichem Aufbau steigt der Wert durch periodische Keepalive-Prüfungen (etwa alle paar Sekunden) weiter an.
  • Kompatibilität: In aktuellen Chromium-, Firefox- und Safari-Versionen verfügbar, ältere Versionen liefern das Feld teils nicht – mit ?? 0 absichern. Die Ermittlung des aktiven Paares über selectedCandidatePairId ist ebenfalls nicht in allen Browsern gleich; Alternativ nominated und state === "succeeded" prüfen.
  • Die Eigenschaft ist schreibgeschützt; das Stats-Objekt ist eine Momentaufnahme und aktualisiert sich nicht selbst.