Start · Sprachen · JavaScript · Referenz · RTCDataChannelStats.type

RTCDataChannelStats.type

Eigenschaft

Schreibgeschützter String, der bei <code>RTCDataChannelStats</code>-Objekten immer den Wert <code>"data-channel"</code> hat und so den Statistiktyp kennzeichnet.

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

Signatur

RTCDataChannelStats.type

Beschreibung

Die Eigenschaft type gehört zu jedem Statistikobjekt der WebRTC Statistics API (geerbt vom Basis-Dictionary RTCStats). Bei einem RTCDataChannelStats-Objekt hat sie immer den Wert "data-channel". Daran erkennt man, dass das Objekt Kennzahlen zu einem RTCDataChannel enthält, etwa label, protocol, state, messagesSent, bytesSent, messagesReceived und bytesReceived.

Ein Aufruf von RTCPeerConnection.getStats() liefert einen RTCStatsReport. Das ist eine Map-ähnliche Sammlung mit Statistikobjekten ganz unterschiedlicher Typen, zum Beispiel "inbound-rtp", "candidate-pair", "transport" oder eben "data-channel". In der Praxis dient type deshalb vor allem als Filterkriterium: Man geht den Bericht durch und verarbeitet nur die Einträge, deren type gleich "data-channel" ist.

Die Eigenschaft ist eine reine Daten-Eigenschaft und hat keine Parameter. Da der Wert zum Typ gehört und festgelegt ist, liefert sie keine Messdaten. Sie legt nur fest, welche weiteren Felder man im Objekt erwarten kann.

Rückgabewert

Typ
string
Beschreibung
Immer "data-channel" (ein Wert aus dem Enum RTCStatsType).

Beispiele

Data-Channel-Statistiken aus dem Bericht filtern

const pc = new RTCPeerConnection();
const channel = pc.createDataChannel('chat');

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === 'data-channel') {
    console.log(stats.type, stats.label, stats.state);
  }
});
data-channel chat connecting

Übertragene Bytes aller Data Channels summieren

const getDataChannelTraffic = async (pc) => {
  const report = await pc.getStats();
  const channels = [...report.values()].filter((s) => s.type === 'data-channel');
  return channels.reduce(
    (sum, s) => ({
      sent: sum.sent + (s.bytesSent ?? 0),
      received: sum.received + (s.bytesReceived ?? 0),
    }),
    { sent: 0, received: 0 }
  );
};

// Nutzung bei bestehender Verbindung
const traffic = await getDataChannelTraffic(pc);
console.log(`Gesendet: ${traffic.sent} B, empfangen: ${traffic.received} B`);
Gesendet: 2048 B, empfangen: 1536 B

Statistiken nach Typ gruppieren

const groupStatsByType = async (pc) => {
  const report = await pc.getStats();
  const groups = {};
  for (const stats of report.values()) {
    (groups[stats.type] ??= []).push(stats);
  }
  return groups;
};

const groups = await groupStatsByType(pc);
console.log(Object.keys(groups).includes('data-channel'));
true

// Wichtig · Fallstricke

  • Einträge erscheinen erst mit einem Kanal: Einträge vom Typ "data-channel" gibt es erst, wenn mit createDataChannel() ein Kanal erzeugt oder über das datachannel-Event empfangen wurde. Ohne Kanal fehlen sie im Bericht vollständig.
  • Genau vergleichen: Vergleiche mit dem genauen String 'data-channel' (mit Bindestrich). In sehr alten Implementierungen wurden teils abweichende oder nicht standardisierte Typnamen verwendet. Deshalb ist es sinnvoll, auf fehlende Felder wie bytesSent vorbereitet zu sein (z. B. mit ?? 0).
  • Bericht wie eine Map behandeln: Der RTCStatsReport ist Map-ähnlich. Iteriere mit forEach, values() oder for...of statt mit Array-Methoden direkt auf dem Bericht.
  • Browser-Unterstützung: Aktuelle Chromium-Browser, Firefox und Safari unterstützen die Eigenschaft. Welche Zusatzfelder befüllt werden, ist je nach Browser leicht unterschiedlich.