Signatur
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
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}`);
}
});
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);
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));
// Wichtig · Fallstricke
- Nicht eindeutig: Mehrere Datenkanäle dürfen dasselbe Label haben. Für eine sichere Zuordnung solltest du zusätzlich
dataChannelIdentifieroderiddes 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.