Start · Sprachen · JavaScript · Referenz · WebTransportSendStream.sendGroup

WebTransportSendStream.sendGroup

Eigenschaft

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

seit JavaScript Experimentell: eingeschränkte Browser-Unterstützun Kategorie: webapi

Signatur

WebTransportSendStream.sendGroup

Beschreibung

Die Eigenschaft sendGroup eines WebTransportSendStream gibt an, zu welcher WebTransportSendGroup der Stream gehört. Sendegruppen bündeln mehrere ausgehende Streams einer WebTransport-Verbindung. Die Priorität über sendOrder gilt nur innerhalb einer Gruppe: Streams mit höherem sendOrder werden gegenüber anderen Streams derselben Gruppe bevorzugt. Die Gruppen untereinander bekommen die Bandbreite dagegen gleichmäßig zugeteilt.

Eine Gruppe erzeugen Sie mit WebTransport.prototype.createSendGroup(). Einem Stream weisen Sie sie entweder schon beim Erstellen zu (Option sendGroup bei createUnidirectionalStream() bzw. createBidirectionalStream()) oder später, indem Sie die Eigenschaft direkt setzen. Mit null nehmen Sie den Stream wieder aus jeder Gruppe heraus.

Sinnvoll ist das, wenn eine Anwendung mehrere unabhängige Datenflüsse hat, die sich fair die Bandbreite teilen sollen, jeder Fluss intern aber eigene Prioritäten braucht. Ein Beispiel ist Video- und Audio-Streaming mit jeweils mehreren Ebenen, ein anderes ein Spiel mit getrennten Kanälen für Spielzustand und Chat.

Parameter

Name Typ Default Beschreibung
$value (beim Setzen) WebTransportSendGroup | null null Die Sendegruppe, der der Stream zugeordnet werden soll, oder null, wenn er zu keiner Gruppe gehören soll. Die Gruppe muss von derselben WebTransport-Instanz stammen.

Rückgabewert

Typ
WebTransportSendGroup | null
Beschreibung
Die aktuell zugeordnete WebTransportSendGroup oder null, wenn der Stream keiner Gruppe angehört.

Beispiele

Stream direkt beim Erstellen einer Gruppe zuordnen

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

const videoGroup = transport.createSendGroup();

const stream = await transport.createUnidirectionalStream({
  sendGroup: videoGroup,
  sendOrder: 10
});

console.log(stream.sendGroup === videoGroup);
console.log(stream.sendOrder);
true 10

Zwei Gruppen für faire Bandbreitenteilung

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

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

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

const writer = keyframes.getWriter();
await writer.write(new Uint8Array([0x01, 0x02, 0x03]));
writer.releaseLock();

Gruppe nachträglich wechseln oder entfernen

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

const bulkGroup = transport.createSendGroup();
const stream = await transport.createUnidirectionalStream();

console.log(stream.sendGroup); // noch keine Gruppe

stream.sendGroup = bulkGroup;   // nachträglich zuordnen
console.log(stream.sendGroup === bulkGroup);

stream.sendGroup = null;        // wieder aus der Gruppe nehmen
console.log(stream.sendGroup);
null true null

Statistiken einer Gruppe abfragen

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

const stream = await transport.createUnidirectionalStream({
  sendGroup: transport.createSendGroup()
});

if (stream.sendGroup) {
  const stats = await stream.sendGroup.getStats();
  console.log('Gesendete Bytes der Gruppe:', stats.bytesSent);
}
Gesendete Bytes der Gruppe: 0

// Wichtig · Fallstricke

  • Nur dieselbe Verbindung: Wenn Sie eine WebTransportSendGroup einer anderen WebTransport-Instanz zuweisen, wird ein InvalidStateError (DOMException) ausgelöst. Das gilt auch für die Option sendGroup beim Erstellen des Streams.
  • Priorität gilt nur innerhalb der Gruppe: sendOrder-Werte aus verschiedenen Gruppen werden nicht miteinander verglichen. Ein hoher sendOrder in Gruppe A verdrängt also keinen Stream in Gruppe B.
  • Nur ein Hinweis an den Browser: Gruppierung und Priorisierung sind Vorgaben für den Browser. Eine genaue Reihenfolge beim Senden oder eine bestimmte Bandbreite ist nicht garantiert.
  • Kompatibilität: WebTransport gibt es nur im sicheren Kontext (HTTPS) und auch in Web Workern. sendGroup und createSendGroup() sind neuer als die übrige API und werden nicht von allen Browsern unterstützt, die WebTransport können. Prüfen Sie das vorher, z. B. mit 'createSendGroup' in WebTransport.prototype.