RTCPeerConnection: createDataChannel() 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 createDataChannel() Methode der RTCPeerConnection Schnittstelle erstellt einen neuen Kanal, der mit dem Remote-Peer verbunden ist, über den beliebige Daten übertragen werden können. Dies kann nützlich für Back-Channel-Inhalte sein, wie Bilder, Dateitransfer, Text-Chat, Spiel-Update-Pakete und so weiter.
Wenn der neue Datenkanal der erste ist, der zur Verbindung hinzugefügt wird, wird durch das Auslösen eines negotiationneeded Ereignisses eine Neuverhandlung gestartet.
Syntax
createDataChannel(label)
createDataChannel(label, options)
Parameter
label-
Ein menschenlesbarer Name für den Kanal. Diese Zeichenkette darf nicht länger als 65.535 Bytes sein.
optionsOptional-
Ein Objekt, das Konfigurationsoptionen für den Datenkanal bereitstellt. Es kann folgende Felder enthalten:
orderedOptional-
Gibt an, ob Nachrichten, die auf dem
RTCDataChannelgesendet werden, in der gleichen Reihenfolge an ihrem Ziel ankommen müssen, in der sie gesendet wurden (true), oder ob sie auch außer der Reihenfolge ankommen dürfen (false). Standard:true. maxPacketLifeTimeOptional-
Die maximale Anzahl von Millisekunden, die Versuche, eine Nachricht im unzuverlässigen Modus zu übertragen, dauern dürfen. Während dieser Wert eine 16-Bit-Nummer ist, kann jeder Benutzeragent ihn auf das von ihm als angemessen erachtete Maximum begrenzen. Standard:
null. maxRetransmitsOptional-
Die maximale Anzahl von Versuchen, eine Nachricht, die beim ersten Mal im unzuverlässigen Modus fehlschlägt, erneut zu übertragen. Während dieser Wert eine 16-Bit-Zahl ist, kann jeder Benutzeragent ihn auf das von ihm als angemessen erachtete Maximum begrenzen. Standard:
null. protocolOptional-
Der Name des auf dem
RTCDataChannelverwendeten Subprotokolls, falls vorhanden; andernfalls der leere String (""). Standard: leerer String (""). Diese Zeichenkette darf nicht länger als 65.535 Bytes sein. negotiatedOptional-
Standardmäßig (
false) werden Datenkanäle im Band verhandelt, wobei eine SeitecreateDataChannelaufruft und die andere Seite dasRTCDataChannelEventEreignis mithilfe desondatachannelEreignishandlers überwacht. Alternativ (true) können sie außer Band verhandelt werden, wobei beide SeitencreateDataChannelmit einer vereinbarten ID aufrufen. Standard:false. idOptional-
Eine 16-Bit numerische ID für den Kanal; zulässige Werte sind 0 bis 65534. Wenn Sie diese Option nicht angeben, wählt der Benutzeragent eine ID für Sie aus.
Hinweis:
Diese Optionen repräsentieren die skript-setzbare Teilmenge der Eigenschaften auf der RTCDataChannel Schnittstelle.
Rückgabewert
Ein neues RTCDataChannel Objekt mit dem angegebenen label, das anhand der vom Parameter options spezifizierten Optionen konfiguriert ist, wenn dieser Parameter enthalten ist; andernfalls werden die oben aufgeführten Standardwerte festgelegt.
Ausnahmen
InvalidStateErrorDOMException-
Ausgelöst, wenn die
RTCPeerConnectiongeschlossen ist. TypeError-
Ausgelöst in folgenden Situationen:
- Der label und/oder der Protokollstring ist zu lang; diese können nicht länger als 65.535 Bytes sein (Bytes, nicht Zeichen).
- Die
idist 65535. Obwohl dies ein gültiger 16-Bit-Wert ist, ist er kein zulässiger Wert fürid.
SyntaxErrorDOMException-
Ausgelöst, wenn Werte für sowohl die
maxPacketLifeTimeals auch diemaxRetransmitsOptionen angegeben wurden. Sie dürfen nur für eine dieser Optionen einen nicht-null-Wert angeben. ResourceInUseDOMException-
Ausgelöst, wenn eine
idangegeben wurde, aber ein andererRTCDataChannelbereits denselben Wert verwendet. OperationErrorDOMException-
Ausgelöst, wenn entweder die angegebene
idbereits in Gebrauch ist, oder wenn keineidangegeben wurde, die WebRTC-Schicht jedoch keine ID automatisch generieren konnte, weil alle IDs in Verwendung sind.
Beispiele
Dieses Beispiel zeigt, wie ein Datenkanal erstellt und Ereignishandler für die open und message Ereignisse eingerichtet werden, um Nachrichten darüber zu senden und zu empfangen (Der Einfachheit halber wird angenommen, dass onnegotiationneeded eingerichtet ist).
// Offerer side
const pc = new RTCPeerConnection(options);
const channel = pc.createDataChannel("chat");
channel.onopen = (event) => {
channel.send("Hi you!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
// Answerer side
const pc = new RTCPeerConnection(options);
pc.ondatachannel = (event) => {
const channel = event.channel;
channel.onopen = (event) => {
channel.send("Hi back!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
};
Alternativ kann eine symmetrischere außer-Band Verhandlung verwendet werden, mit einer vereinbarten ID (hier 0):
// Both sides
const pc = new RTCPeerConnection(options);
const channel = pc.createDataChannel("chat", { negotiated: true, id: 0 });
channel.onopen = (event) => {
channel.send("Hi!");
};
channel.onmessage = (event) => {
console.log(event.data);
};
Für ein ausführlicheres Beispiel, das zeigt, wie die Verbindung und der Kanal eingerichtet werden, siehe Ein einfaches RTCDataChannel Beispiel.
Spezifikationen
| Specification |
|---|
| WebRTC: Real-Time Communication in Browsers> # dom-peerconnection-createdatachannel> |
Browser-Kompatibilität
Loading…