Signatur
Beschreibung
Die schreibgeschützte Eigenschaft dataChannelsClosed gehört zum Statistik-Wörterbuch RTCPeerConnectionStats. Dieses Objekt erscheint im Bericht von RTCPeerConnection.getStats() als Eintrag mit type === "peer-connection". Der Wert gibt an, wie viele verschiedene Datenkanäle während ihrer Lebensdauer den Zustand "open" verlassen haben. Das passiert, wenn eine der beiden Seiten den Kanal schließt oder wenn der darunterliegende Transport (SCTP/DTLS) beendet wird.
Kanäle, die direkt von "connecting" nach "closing" oder "closed" wechseln, ohne jemals offen gewesen zu sein, werden nicht mitgezählt. Der Zähler steigt nur, er wird also nie kleiner.
Am nützlichsten ist die Eigenschaft zusammen mit dataChannelsOpened: Die Differenz dataChannelsOpened - dataChannelsClosed ergibt die Zahl der aktuell geöffneten Datenkanäle. Damit lassen sich Lecks finden (Kanäle, die nie geschlossen werden), die Kanalnutzung in Dashboards überwachen oder Verbindungsabbrüche erkennen.
Rückgabewert
RTCDataChannel-Objekte den Zustand "open" bisher verlassen haben. Fehlt die Unterstützung im Browser, ist die Eigenschaft undefined.Beispiele
Wert aus dem Statistikbericht auslesen
const pc = new RTCPeerConnection();
const getClosedChannels = async (connection) => {
const report = await connection.getStats();
for (const stats of report.values()) {
if (stats.type === "peer-connection") {
return stats.dataChannelsClosed ?? 0;
}
}
return 0;
};
console.log("Geschlossene Kanäle:", await getClosedChannels(pc));
Aktuell geöffnete Datenkanäle berechnen
const countOpenChannels = async (pc) => {
const report = await pc.getStats();
const stats = [...report.values()].find((s) => s.type === "peer-connection");
if (!stats) return null;
const { dataChannelsOpened = 0, dataChannelsClosed = 0 } = stats;
return dataChannelsOpened - dataChannelsClosed;
};
// Beispiel: nach 3 geöffneten und 1 geschlossenen Kanal
console.log(`Offene Kanäle: ${await countOpenChannels(pc)}`);
Kanal-Schließungen laufend überwachen
const monitorDataChannels = (pc, intervalMs = 2000) => {
let lastClosed = 0;
const timer = setInterval(async () => {
if (pc.connectionState === "closed") {
clearInterval(timer);
return;
}
const report = await pc.getStats();
report.forEach((s) => {
if (s.type !== "peer-connection") return;
const closed = s.dataChannelsClosed ?? 0;
if (closed > lastClosed) {
console.warn(`${closed - lastClosed} Datenkanal/-kanäle geschlossen (gesamt: ${closed})`);
lastClosed = closed;
}
});
}, intervalMs);
return () => clearInterval(timer);
};
const stopMonitoring = monitorDataChannels(pc);
// Wichtig · Fallstricke
- Nur offen gewesene Kanäle zählen: Scheitert ein Kanal schon beim Aufbau und wechselt von
"connecting"direkt nach"closed", steigt der Zähler nicht. Fehlgeschlagene Verbindungsversuche erkennt man daher nicht über diese Eigenschaft, sondern über das Ereigniserrorbzw.closedes Kanals. - Verschiedene Kanäle: Jedes
RTCDataChannel-Objekt wird höchstens einmal gezählt. Ein neu erzeugter Kanal mit demselbenlabelzählt aber als eigener Kanal. - Zeitverzögerung:
getStats()ist asynchron. Direkt nachchannel.close()kann der Zähler noch den alten Wert zeigen, solange der Kanal im Zustand"closing"ist. Erst nach dem Ereigniscloseabfragen oder regelmäßig neu abfragen. - Kompatibilität: Chromium-Browser unterstützen die Eigenschaft. In Firefox und Safari kam sie erst in neueren Versionen dazu. Mit
?? 0absichern und das Fehlen nicht als „0 Kanäle“ auswerten, wenn es auf genaue Werte ankommt. - Die Statistik gilt für die ganze
RTCPeerConnection. Werte für einzelne Kanäle liefern Einträge mittype === "data-channel"(RTCDataChannelStats).