Signatur
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
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]));
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
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);
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);
}
// Wichtig · Fallstricke
- Nur Gruppen derselben Verbindung: Wenn du eine
WebTransportSendGroupeiner anderenWebTransport-Instanz zuweist, wird eineInvalidStateError-DOMExceptionausgelöst. Das gilt auch fürcreateWritable(). - Priorisierung ist nur ein Hinweis:
sendGroupundsendOrderbeeinflussen 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. sendOrderwirkt nur innerhalb einer Gruppe. Werte aus verschiedenen Gruppen lassen sich nicht miteinander vergleichen.- Kompatibilität:
WebTransportDatagramsWritable,createWritable()undcreateSendGroup()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. mittypeof transport.createSendGroup === 'function'.