Start · Sprachen · JavaScript · Referenz · WebTransportDatagramsWritable.sendGroup

WebTransportDatagramsWritable.sendGroup

Eigenschaft

Liest oder setzt die <code>WebTransportSendGroup</code>, der dieser Datagramm-Stream für die Priorisierung per <code>sendOrder</code> zugeordnet ist.

seit JavaScript Experimentell – eingeschränkte Browserunterstützun Kategorie: webapi

Signatur

WebTransportDatagramsWritable.sendGroup

Beschreibung

Die Eigenschaft sendGroup eines WebTransportDatagramsWritable gibt an, zu welcher WebTransportSendGroup dieser beschreibbare Datagramm-Stream gehört. Die Eigenschaft ist les- und schreibbar. Ihr Wert ist entweder ein WebTransportSendGroup-Objekt oder null, wenn der Stream keiner Gruppe angehört.

Sendegruppen regeln, wie ausgehende Daten über eine WebTransport-Verbindung priorisiert werden. Innerhalb derselben Gruppe werden Streams und Datagramm-Writer nach ihrer sendOrder sortiert: Höhere Werte werden zuerst gesendet. Zwischen verschiedenen Gruppen verteilt der Browser die Bandbreite dagegen fair. So kann man zum Beispiel Audio- und Video-Daten in eigene Gruppen legen und innerhalb jeder Gruppe Keyframes bevorzugen, ohne dass ein Medientyp den anderen komplett verdrängt.

Den Anfangswert legt man meist schon beim Erzeugen über transport.datagrams.createWritable({ sendGroup, sendOrder }) fest. Eine neue Gruppe erhält man über WebTransport.prototype.createSendGroup(). Durch Zuweisung an sendGroup kann man einen Writer auch später noch in eine andere Gruppe verschieben oder mit null aus seiner Gruppe herausnehmen.

Parameter

Name Typ Default Beschreibung
$value (Setter) WebTransportSendGroup | null null Neue Sendegruppe für diesen Datagramm-Writer. Sie muss von derselben WebTransport-Instanz stammen. null nimmt den Writer aus jeder Gruppe heraus.

Rückgabewert

Typ
WebTransportSendGroup | null
Beschreibung
Die aktuelle Sendegruppe des Writers oder null, wenn er keiner Gruppe angehört.

Beispiele

Writer direkt in einer Sendegruppe erzeugen

const transport = new WebTransport('https://example.com:4433/game');
await transport.ready;

// Eigene Gruppe für Positions-Updates anlegen
const positionGroup = transport.createSendGroup();

const writable = transport.datagrams.createWritable({
  sendGroup: positionGroup,
  sendOrder: 10
});

console.log(writable.sendGroup === positionGroup);

const writer = writable.getWriter();
await writer.write(new Uint8Array([1, 42, 17]));
true

Audio und Video in getrennten Gruppen priorisieren

const transport = new WebTransport('https://media.example.com/live');
await transport.ready;

const audioGroup = transport.createSendGroup();
const videoGroup = transport.createSendGroup();

// Innerhalb der Video-Gruppe kommen Keyframes vor Delta-Frames
const keyframes = transport.datagrams.createWritable({ sendGroup: videoGroup, sendOrder: 100 });
const deltas = transport.datagrams.createWritable({ sendGroup: videoGroup, sendOrder: 1 });
const audio = transport.datagrams.createWritable({ sendGroup: audioGroup, sendOrder: 50 });

// Zwischen den Gruppen teilt der Browser die Bandbreite fair auf
console.log(keyframes.sendGroup === deltas.sendGroup); // gleiche Gruppe
console.log(audio.sendGroup === videoGroup);           // andere Gruppe
true false

Gruppe nachträglich wechseln oder entfernen

const transport = new WebTransport('https://example.com/chat');
await transport.ready;

const writable = transport.datagrams.createWritable();
console.log(writable.sendGroup); // anfangs keine Gruppe

const urgentGroup = transport.createSendGroup();
writable.sendGroup = urgentGroup;
console.log(writable.sendGroup === urgentGroup);

// Wieder aus der Gruppe herausnehmen
writable.sendGroup = null;
console.log(writable.sendGroup);
null true null

Fehler bei einer Gruppe einer fremden Verbindung

const a = new WebTransport('https://a.example.com/');
const b = new WebTransport('https://b.example.com/');
await Promise.all([a.ready, b.ready]);

const writable = a.datagrams.createWritable();
try {
  writable.sendGroup = b.createSendGroup();
} catch (err) {
  console.log(err.name);
}
InvalidStateError

// Wichtig · Fallstricke

  • Nur Gruppen derselben Verbindung: Wenn du eine WebTransportSendGroup einer anderen WebTransport-Instanz zuweist, wird eine InvalidStateError-DOMException ausgelöst. Das gilt auch für createWritable().
  • Priorisierung ist nur ein Hinweis: sendGroup und sendOrder beeinflussen nur, in welcher Reihenfolge der Browser sendet. Sie garantieren weder die Zustellung noch die Reihenfolge beim Empfänger. Datagramme bleiben unzuverlässig und können verloren gehen.
  • sendOrder wirkt nur innerhalb einer Gruppe. Werte aus verschiedenen Gruppen lassen sich nicht miteinander vergleichen.
  • Kompatibilität: WebTransportDatagramsWritable, createWritable() und createSendGroup() sind neuere Teile der WebTransport-Spezifikation und werden noch nicht von allen Browsern unterstützt. WebTransport gibt es außerdem nur in sicheren Kontexten (HTTPS) und über HTTP/3. Prüfe die Unterstützung vorher, z. B. mit typeof transport.createSendGroup === 'function'.