Start · Sprachen · JavaScript · Referenz · WebTransportSendGroup.getStats()

WebTransportSendGroup.getStats()

Methode

Gibt ein <code>Promise</code> zurück, das mit Statistiken erfüllt wird. Die Werte sind über alle Sende-Streams zusammengefasst, die der <code>WebTransportSendGroup</code> gerade zugeordnet sind.

seit JavaScript Experimentell – eingeschränkte Browser-Unterstützu Kategorie: webapi

Signatur

WebTransportSendGroup.prototype.getStats()

Beschreibung

Die Methode getStats() einer WebTransportSendGroup liefert eine Momentaufnahme der Übertragungsstatistik für die ganze Gruppe. Eine Sendegruppe bündelt mehrere ausgehende Streams einer WebTransport-Verbindung, zum Beispiel alle Streams eines Video-Layers oder eines Spielzustands. So kann der Browser die Streams bei der Priorisierung gemeinsam behandeln. getStats() zählt die Werte aller Streams zusammen, die der Gruppe zum Zeitpunkt des Aufrufs zugeordnet sind.

Das Ergebnis hat dieselbe Form wie bei WebTransportSendStream.getStats(), also ein Objekt vom Typ WebTransportSendStreamStats. Es enthält vor allem:

  • bytesWritten – Bytes, die die Anwendung in die Streams geschrieben hat, auch wenn sie noch gepuffert sind.
  • bytesSent – Bytes, die tatsächlich über das Netz gesendet wurden. Erneute Übertragungen zählen nicht mit.
  • bytesAcknowledged – Bytes, deren Empfang der Server bestätigt hat.

Mit diesen Werten lassen sich Durchsatz, Rückstau (bytesWritten - bytesSent) und noch nicht bestätigte Daten (bytesSent - bytesAcknowledged) pro Gruppe messen. Das ist nützlich für eine adaptive Bitrate, für Monitoring-Dashboards oder um zu entscheiden, ob eine Gruppe mit niedriger Priorität gedrosselt werden soll.

Rückgabewert

Typ
Promise<WebTransportSendStreamStats>
Beschreibung
Ein Promise, das mit einem Objekt erfüllt wird. Es enthält die über alle aktuell zugeordneten Streams zusammengezählten Werte, u. a. bytesWritten, bytesSent und bytesAcknowledged (jeweils number).

Beispiele

Sendegruppe anlegen und Statistik abfragen

const transport = new WebTransport('https://example.com:4433/wt');
await transport.ready;

// Gruppe anlegen und zwei Streams zuordnen
const group = transport.createSendGroup();
const s1 = await transport.createUnidirectionalStream({ sendGroup: group });
const s2 = await transport.createUnidirectionalStream({ sendGroup: group });

const w1 = s1.getWriter();
const w2 = s2.getWriter();
await w1.write(new Uint8Array(1024));
await w2.write(new Uint8Array(2048));

const stats = await group.getStats();
console.log(`Geschrieben: ${stats.bytesWritten} Bytes`);
console.log(`Gesendet: ${stats.bytesSent} Bytes`);
console.log(`Bestätigt: ${stats.bytesAcknowledged} Bytes`);
Geschrieben: 3072 Bytes Gesendet: 3072 Bytes Bestätigt: 2048 Bytes (Werte für gesendet/bestätigt hängen vom Netz ab)

Rückstau und Durchsatz einer Gruppe überwachen

const monitorGroup = (group, label, intervalMs = 1000) => {
  let lastSent = 0;
  const id = setInterval(async () => {
    try {
      const { bytesWritten, bytesSent, bytesAcknowledged } = await group.getStats();
      const backlog = bytesWritten - bytesSent;
      const inFlight = bytesSent - bytesAcknowledged;
      const kbps = ((bytesSent - lastSent) * 8) / intervalMs;
      lastSent = bytesSent;
      console.log(`[${label}] ${kbps.toFixed(1)} kbit/s, Rückstau ${backlog} B, unbestätigt ${inFlight} B`);
    } catch (err) {
      // Verbindung geschlossen → Überwachung beenden
      console.warn(`[${label}] Statistik nicht verfügbar:`, err.message);
      clearInterval(id);
    }
  }, intervalMs);
  return () => clearInterval(id);
};

const stopMonitoring = monitorGroup(videoGroup, 'Video');
[Video] 812.4 kbit/s, Rückstau 0 B, unbestätigt 4096 B

Stream nachträglich einer Gruppe zuordnen

const group = transport.createSendGroup();
const stream = await transport.createUnidirectionalStream();

// Stream gehört noch zu keiner Gruppe → zählt nicht mit
console.log((await group.getStats()).bytesWritten);

stream.sendGroup = group;
const writer = stream.getWriter();
await writer.write(new TextEncoder().encode('Hallo'));
console.log((await group.getStats()).bytesWritten);
0 5

// Wichtig · Fallstricke

  • Browser-Unterstützung: WebTransportSendGroup ist ein neuer, experimenteller Teil der WebTransport-Spezifikation und wird noch nicht von allen Browsern unterstützt. Vorher prüfen, ob die Funktion existiert, z. B. mit typeof transport.createSendGroup === 'function'. WebTransport ist nur in sicheren Kontexten (HTTPS) verfügbar.
  • Nur eine Momentaufnahme: Die Werte gelten nur für die Streams, die der Gruppe beim Aufruf zugeordnet sind. Wird ein Stream per stream.sendGroup = andereGruppe oder null aus der Gruppe entfernt, kann die Summe beim nächsten Aufruf kleiner werden. Differenzen zwischen zwei Abfragen sind deshalb nur verlässlich, wenn sich die Zuordnung dazwischen nicht ändert.
  • Die Zähler sind bei ungleich schnellem Senden verschiedener Streams nicht garantiert atomar zueinander. bytesAcknowledged kann hinter bytesSent zurückliegen, und bytesSent hinter bytesWritten.
  • Ist die Verbindung geschlossen oder fehlgeschlagen, kann das Promise abgelehnt werden. Den Aufruf daher in try/catch kapseln.
  • Performance: Nicht in sehr engen Schleifen abfragen. Ein Intervall im Bereich von 250–1000 ms reicht fürs Monitoring in der Regel aus.