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
send(data)
Parameter
data
-
Die Daten, die über die Verbindung übertragen werden sollen. Dies kann ein String, ein
Blob
, einArrayBuffer
, einTypedArray
oder einDataView
-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
istconnecting
). Der Datenkanal muss seine eigene Verbindung herstellen, da er einen separaten Transportkanal von dem der Medieninhalte verwendet. Dieser Fehler tritt ohne Senden oder Zwischenspeichern derdata
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 dasEOR
(End of Record)-Flag unterstützt, um anzuzeigen, wann eine empfangene Nachricht das letzte Stück eines mehrteiligen Objekts ist, das mitsend()
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.
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