Signatur
Beschreibung
Die schreibgeschützte Eigenschaft messagesReceived gehört zum Wörterbuch RTCDataChannelStats. Das ist der Statistikeintrag vom Typ "data-channel", den RTCPeerConnection.getStats() in seinem RTCStatsReport liefert. Der Wert ist eine positive ganze Zahl. Sie gibt an, wie viele Nachrichten der lokale Endpunkt seit dem Öffnen auf diesem Datenkanal empfangen hat. Das entspricht der Anzahl der ausgelösten message-Ereignisse.
Typische Einsatzzwecke sind Monitoring und Fehlersuche: Du prüfst, ob beim Empfänger überhaupt Daten ankommen, vergleichst den Wert mit messagesSent der Gegenseite, um Verluste zu erkennen (bei unzuverlässigen Kanälen mit ordered: false oder maxRetransmits), oder du berechnest durch wiederholtes Abfragen eine Nachrichtenrate pro Sekunde.
Der Zähler steigt nur. Er zählt Nachrichten, nicht Bytes. Die empfangene Datenmenge liefert bytesReceived. Mit dataChannelIdentifier und label ordnest du den Statistikeintrag dem richtigen Kanal zu, falls mehrere Kanäle offen sind.
Rückgabewert
message-Ereignisse).Beispiele
Empfangene Nachrichten aller Datenkanäle auslesen
const logDataChannelStats = async (pc) => {
const report = await pc.getStats();
report.forEach((stats) => {
if (stats.type === "data-channel") {
console.log(`Kanal "${stats.label}": ${stats.messagesReceived} Nachrichten empfangen`);
}
});
};
// pc ist eine bestehende RTCPeerConnection mit offenem Datenkanal
await logDataChannelStats(pc);
Nachrichtenrate pro Sekunde messen
const getReceived = async (pc, label) => {
const report = await pc.getStats();
for (const stats of report.values()) {
if (stats.type === "data-channel" && stats.label === label) {
return { count: stats.messagesReceived ?? 0, time: stats.timestamp };
}
}
return null;
};
let last = await getReceived(pc, "telemetry");
const timer = setInterval(async () => {
const now = await getReceived(pc, "telemetry");
if (!now || !last) return;
const rate = ((now.count - last.count) / (now.time - last.time)) * 1000;
console.log(`Empfangsrate: ${rate.toFixed(1)} Nachrichten/s`);
last = now;
}, 2000);
Zähler mit eigenem message-Zähler vergleichen
const channel = pc.createDataChannel("sync");
let ownCount = 0;
channel.addEventListener("message", () => ownCount++);
const check = async () => {
const report = await pc.getStats();
const stats = [...report.values()].find(
(s) => s.type === "data-channel" && s.label === "sync"
);
console.log("Statistik:", stats?.messagesReceived, "| eigener Zähler:", ownCount);
};
setTimeout(check, 5000);
// Wichtig · Fallstricke
- Nur über
getStats()erreichbar:messagesReceivedist keine Eigenschaft vonRTCDataChannelselbst. Du findest sie nur im Statistikeintrag mittype === "data-channel". - Momentaufnahme: Der Wert wird nicht live aktualisiert. Für aktuelle Zahlen musst du
getStats()erneut aufrufen. Browser können Statistiken außerdem zwischenspeichern, sodass kurz hintereinander ausgeführte Abfragen denselben Wert liefern. - Nachrichten statt Bytes: Große Nachrichten zählen einmal, egal wie groß sie sind. Für Durchsatzmessungen nimmst du
bytesReceived. - Geschlossene Kanäle: Nach dem Schließen kann der Eintrag je nach Browser noch eine Weile im Report stehen oder verschwinden. Prüfe dazu
state. - Kompatibilität: Wird von aktuellen Versionen von Chrome, Edge, Firefox und Safari unterstützt. In älteren Browsern kann das Feld fehlen, verwende deshalb einen Fallback wie
?? 0.