RTCDataChannel: send()-Methode

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

Die send()-Methode des RTCDataChannel-Interfaces sendet Daten über den Datenkanal zum Remote-Peer. Dies kann jederzeit geschehen, außer während des Anfangsprozesses der Erstellung des zugrunde liegenden Transportkanals. Daten, die vor dem Verbindungsaufbau gesendet werden, werden, wenn möglich, zwischengespeichert (oder es tritt ein Fehler auf, falls dies nicht möglich ist) und werden ebenfalls zwischengespeichert, wenn sie während des Schließens oder nach dem Schließen der Verbindung gesendet werden.

Hinweis: Verschiedene Browser haben unterschiedliche Beschränkungen bezüglich der Größe der Nachricht, die Sie senden können. Es gibt Spezifikationen, um zu definieren, wie große Nachrichten automatisch fragmentiert werden können, jedoch implementieren nicht alle Browser diese, und diejenigen, die es tun, haben verschiedene zusätzliche Beschränkungen. Dies wird im Laufe der Zeit weniger kompliziert werden, aber wenn Sie jetzt Fragen dazu haben, lesen Sie bitte Verstehen von Nachrichtenbegrenzungen.

Syntax

js
send(data)

Parameter

data

Die Daten, die über die Verbindung übertragen werden sollen. Dies kann ein String, ein Blob, ein ArrayBuffer, ein TypedArray oder ein DataView-Objekt sein.

Rückgabewert

Keiner (undefined).

Ausnahmen

InvalidStateError DOMException

Wird ausgelöst, wenn der Datenkanal seine eigene Verbindung noch nicht fertiggestellt hat (das heißt, sein readyState ist connecting). Der Datenkanal muss seine eigene Verbindung herstellen, da er einen separaten Transportkanal von dem der Medieninhalte verwendet. Dieser Fehler tritt ohne Senden oder Zwischenspeichern der data auf.

NetworkError DOMException

Wird ausgelöst, wenn die angegebenen data zwischengespeichert werden müssten und dafür kein Platz im Puffer ist. In diesem Szenario wird der zugrunde liegende Transport sofort geschlossen.

TypeError

Wird ausgelöst, wenn die angegebenen data zu groß sind, damit der andere Peer sie empfangen kann. Da es mehrere Techniken gibt, um große Daten in kleinere Stücke für die Übertragung aufzuteilen, kann es zu Szenarien kommen, in denen der andere Peer nicht die gleichen Techniken unterstützt. Zum Beispiel, wenn ein Peer ein moderner Browser ist, der das EOR (End of Record)-Flag unterstützt, um anzuzeigen, wann eine empfangene Nachricht das letzte Stück eines mehrteiligen Objekts ist, das mit send() gesendet wird. Für weitere Informationen über Größenbeschränkungen von Nachrichten siehe Verstehen von Nachrichtenbegrenzungen.

Beispiele

In diesem Beispiel wird eine Routine namens sendMessage() erstellt; sie akzeptiert ein Objekt als Eingabe und sendet über das RTCDataChannel ein JSON-String mit dem angegebenen Objekt und einem Zeitstempel an den Remote-Peer.

js
const pc = new RTCPeerConnection();
const dc = pc.createDataChannel("BackChannel");

function sendMessage(msg) {
  const obj = {
    message: msg,
    timestamp: new Date(),
  };
  dc.send(JSON.stringify(obj));
}

Spezifikationen

Specification
WebRTC: Real-Time Communication in Browsers
# dom-rtcdatachannel-send

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch