Start · Sprachen · JavaScript · Referenz · RTCDataChannel.maxPacketLifeTime

RTCDataChannel.maxPacketLifeTime

Eigenschaft

Gibt die Zeit in Millisekunden zurück, in der der Browser eine Nachricht im unzuverlässigen Modus erneut senden darf, oder <code>null</code>, wenn keine Grenze gesetzt wurde.

seit JavaScript Baseline: alle modernen Browser (Chrome, Edge, Fir Kategorie: webapi

Signatur

RTCDataChannel.maxPacketLifeTime

Beschreibung

Die schreibgeschützte Eigenschaft maxPacketLifeTime eines RTCDataChannel gibt an, wie viele Millisekunden der Browser versuchen darf, eine Nachricht zu übertragen und bei Verlust erneut zu senden. Danach wird die Nachricht verworfen. Den Wert legt man beim Erstellen des Kanals über die Option maxPacketLifeTime in RTCPeerConnection.createDataChannel() fest.

Mit dieser Option läuft der Kanal im unzuverlässigen Modus mit Zeitgrenze. Das eignet sich für Daten, die schnell veralten, etwa Spielerpositionen in Echtzeitspielen, Cursor-Bewegungen oder Telemetrie. Eine verspätete Nachricht ist dort nichts mehr wert, und neue Daten sollen nicht auf die erneute Übertragung alter Pakete warten.

Wurde keine Zeitgrenze angegeben, ist der Wert null. Dann ist der Kanal entweder zuverlässig (Standard) oder er begrenzt stattdessen über maxRetransmits die Anzahl der Wiederholungen. Beide Optionen schließen sich gegenseitig aus.

Rückgabewert

Typ
number | null
Beschreibung
Die Zeitgrenze für erneute Übertragungen in Millisekunden (vorzeichenloser 16-Bit-Wert, 0–65535) oder null, wenn beim Erstellen keine maxPacketLifeTime angegeben wurde.

Beispiele

Unzuverlässigen Kanal mit Zeitgrenze erstellen

const pc = new RTCPeerConnection();

// Positionsdaten: nach 150 ms nicht mehr erneut senden
const channel = pc.createDataChannel('positionen', {
  ordered: false,
  maxPacketLifeTime: 150
});

console.log(channel.maxPacketLifeTime);
console.log(channel.maxRetransmits);
console.log(channel.reliable ?? 'reliable wird nicht unterstützt');
150 null reliable wird nicht unterstützt

Standardkanal ohne Zeitgrenze

const pc = new RTCPeerConnection();
const chat = pc.createDataChannel('chat');

// Zuverlässiger Kanal: keine Zeitgrenze gesetzt
console.log(chat.maxPacketLifeTime);
null

Zuverlässigkeitsmodus eines empfangenen Kanals auswerten

const pc = new RTCPeerConnection();

const describeReliability = (ch) => {
  if (ch.maxPacketLifeTime !== null) {
    return `unzuverlässig, max. ${ch.maxPacketLifeTime} ms`;
  }
  if (ch.maxRetransmits !== null) {
    return `unzuverlässig, max. ${ch.maxRetransmits} Wiederholungen`;
  }
  return 'zuverlässig';
};

// Kanal, den die Gegenseite geöffnet hat
pc.addEventListener('datachannel', ({ channel }) => {
  console.log(`${channel.label}: ${describeReliability(channel)}`);
});
positionen: unzuverlässig, max. 150 ms

// Wichtig · Fallstricke

  • Nur lesbar: Der Wert lässt sich nach dem Erstellen des Kanals nicht mehr ändern. Er muss beim Aufruf von createDataChannel() festgelegt werden.
  • Gegenseitiger Ausschluss: Wer maxPacketLifeTime und maxRetransmits gleichzeitig angibt, bekommt von createDataChannel() einen TypeError.
  • Wertebereich: Werte über 65535 werden vom Browser auf das Maximum begrenzt. Der zurückgelesene Wert kann also kleiner sein als der angegebene.
  • Keine Zustellungsgarantie: Nach Ablauf der Zeit werden Nachrichten ohne Hinweis verworfen. Es gibt kein Ereignis für verlorene Nachrichten. Wichtige Daten (z. B. Chat-Nachrichten oder Dateien) gehören in einen zuverlässigen Kanal.
  • Die Zeitgrenze gilt pro Nachricht ab dem Sendeversuch, nicht für die Laufzeit des Kanals. Sie ergibt meist zusammen mit ordered: false Sinn, damit verlorene Pakete neuere nicht aufhalten.
  • Kompatibilität: Ältere Chrome-Versionen boten stattdessen die nicht standardisierte Eigenschaft maxRetransmitTime an. Die veraltete Eigenschaft reliable sollte man nicht mehr verwenden.