Start · Sprachen · JavaScript · Referenz · RTCDataChannelStats.label

RTCDataChannelStats.label

Eigenschaft

Gibt das <code>label</code> des Datenkanals zurück, zu dem dieses <code>RTCDataChannelStats</code>-Objekt gehört, also denselben Wert wie <code>RTCDataChannel.label</code>.

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

Signatur

RTCDataChannelStats.label

Beschreibung

Die schreibgeschützte Eigenschaft label des Wörterbuchs RTCDataChannelStats enthält den Namen, den der Datenkanal beim Erstellen über RTCPeerConnection.createDataChannel(label) bekommen hat. Das Statistikobjekt selbst erhältst du über RTCPeerConnection.getStats(). Es ist ein Eintrag im zurückgegebenen RTCStatsReport mit type === "data-channel".

Weil ein Bericht oft viele Datenkanäle enthält, brauchst du label vor allem, um die Kennzahlen (messagesSent, bytesReceived, state usw.) einem bestimmten Kanal der Anwendung zuzuordnen, etwa "chat" oder "dateitransfer". Das ist nützlich für Überwachungs-Dashboards, zur Fehlersuche und zum Protokollieren des Durchsatzes pro Kanal.

Der Wert ist ein beliebiger String und kann leer sein. Er muss nicht eindeutig sein: Mehrere Kanäle dürfen dasselbe Label haben. Wenn du einen Kanal sicher erkennen willst, kombiniere label mit dataChannelIdentifier (der SCTP-Stream-ID).

Rückgabewert

Typ
string
Beschreibung
Das Label des zugehörigen RTCDataChannel. Es kann ein leerer String "" sein, wenn beim Erstellen kein Label angegeben wurde.

Beispiele

Labels aller Datenkanäle aus getStats() auslesen

const pc = new RTCPeerConnection();
const chat = pc.createDataChannel("chat");
const files = pc.createDataChannel("dateitransfer");

const report = await pc.getStats();
report.forEach((stats) => {
  if (stats.type === "data-channel") {
    console.log(`${stats.label}: Zustand ${stats.state}`);
  }
});
chat: Zustand connecting dateitransfer: Zustand connecting

Durchsatz eines bestimmten Kanals regelmäßig protokollieren

const logChannelStats = async (pc, wantedLabel) => {
  const report = await pc.getStats();
  for (const stats of report.values()) {
    if (stats.type === "data-channel" && stats.label === wantedLabel) {
      console.log(
        `[${stats.label}#${stats.dataChannelIdentifier}] ` +
        `gesendet: ${stats.messagesSent} Nachrichten / ${stats.bytesSent} Bytes`
      );
    }
  }
};

// pc sei eine verbundene RTCPeerConnection
const timer = setInterval(() => logChannelStats(pc, "chat"), 5000);
// später: clearInterval(timer);
[chat#0] gesendet: 12 Nachrichten / 842 Bytes

Statistiken nach Label gruppieren (Label ist nicht eindeutig)

const groupByLabel = async (pc) => {
  const report = await pc.getStats();
  const groups = new Map();
  for (const s of report.values()) {
    if (s.type !== "data-channel") continue;
    const key = s.label || "(ohne Label)";
    groups.set(key, [...(groups.get(key) ?? []), s.dataChannelIdentifier]);
  }
  return Object.fromEntries(groups);
};

console.log(await groupByLabel(pc));
{ chat: [0, 2], "(ohne Label)": [4] }

// Wichtig · Fallstricke

  • Nicht eindeutig: Mehrere Datenkanäle dürfen dasselbe Label haben. Für eine sichere Zuordnung solltest du zusätzlich dataChannelIdentifier oder id des Statistikobjekts verwenden.
  • Nur ein Momentbild: Das Statistikobjekt ändert sich später nicht mehr. Aktuelle Werte bekommst du nur, wenn du getStats() erneut aufrufst.
  • Wurde bei createDataChannel() kein Label übergeben, ist der Wert ein leerer String.
  • Wenn der Kanal geschlossen ist (state === "closed"), kann sein Eintrag je nach Browser noch eine Weile im Bericht auftauchen oder ganz fehlen.
  • Kompatibilität: Die aktuellen Versionen von Chrome, Edge, Firefox und Safari unterstützen die Eigenschaft. Ältere Implementierungen setzten vor der Standardisierung teils andere Statistiktypen oder Feldnamen ein. Prüfe deshalb am besten auf stats.type === "data-channel".
  • Datenschutz: Labels werden an die Gegenstelle übertragen. Schreib also keine sensiblen Daten wie Tokens oder Benutzer-IDs hinein.