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 Januar 2020.
Die send()
-Methode der RTCDataChannel
-Schnittstelle sendet Daten über den Datenkanal zum entfernten Peer. Dies kann jederzeit erfolgen, außer während des anfänglichen Prozesses der Erstellung des zugrunde liegenden Transportkanals. Daten, die vor dem Herstellen der Verbindung gesendet werden, werden gepuffert, sofern möglich (oder es tritt ein Fehler auf, wenn es nicht möglich ist) und werden auch gepuffert, wenn sie gesendet werden, während die Verbindung geschlossen wird oder bereits geschlossen ist.
Hinweis: Verschiedene Browser haben unterschiedliche Begrenzungen für die Größe der Nachrichten, die Sie senden können. Spezifikationen existieren, um zu definieren, wie große Nachrichten automatisch fragmentiert werden können, aber nicht alle Browser implementieren dies, und die, die es tun, haben verschiedene zusätzliche Einschränkungen. Dies wird mit der Zeit weniger kompliziert, aber für jetzt, wenn Sie Fragen haben, siehe Verstehen der Nachrichtenbegrenzungen.
Syntax
send(data)
Parameter
data
-
Die zu übertragenden Daten über die Verbindung. 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 eingerichtet 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 auf, ohne dasdata
gesendet oder gepuffert wird. OperationError
DOMException
-
Wird ausgelöst, wenn die angegebenen
data
gepuffert werden müssten und im Puffer kein Platz dafür ist. TypeError
-
Wird ausgelöst, wenn die angegebenen
data
zu groß sind, um vom anderen Peer empfangen zu werden. Da es mehrere Techniken gibt, um große Daten in kleinere Stücke für den Transfer zu unterteilen, ist es möglich, Szenarien zu begegnen, in denen der andere Peer nicht die gleichen Techniken unterstützt. Zum Beispiel, wenn ein Peer ein moderner Browser ist, der dieEOR
(End of Record)-Flagge verwendet, um anzuzeigen, wann eine empfangene Nachricht das letzte Stück eines in mehrere Teile gesendeten Objekts ist, das übersend()
gesendet wurde. Für weitere Informationen zu Einschränkungen der Nachrichtengröße, siehe Verstehen der Nachrichtenbegrenzungen.
Beispiele
In diesem Beispiel wird eine Routine namens sendMessage()
erstellt, die ein Objekt als Eingabe akzeptiert und dem entfernten Peer über das RTCDataChannel
einen JSON-String mit dem angegebenen Objekt und einem Zeitstempel sendet.
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
Loading…