Signatur
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
"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);
}
});
Ü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`);
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'));
// Wichtig · Fallstricke
- Einträge erscheinen erst mit einem Kanal: Einträge vom Typ
"data-channel"gibt es erst, wenn mitcreateDataChannel()ein Kanal erzeugt oder über dasdatachannel-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 wiebytesSentvorbereitet zu sein (z. B. mit?? 0). - Bericht wie eine Map behandeln: Der
RTCStatsReportist Map-ähnlich. Iteriere mitforEach,values()oderfor...ofstatt 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.