--- title: RTCPeerConnection.createDataChannel() slug: Web/API/RTCPeerConnection/createDataChannel translation_of: Web/API/RTCPeerConnection/createDataChannel ---
{{APIRef("WebRTC")}}{{SeeCompatTable}}
{{domxref("RTCPeerConnection")}} 的 createDataChannel()
方法创建一个可以发送任意数据的数据通道(data channel)。常用于后台传输内容, 例如: 图像, 文件传输, 聊天文字, 游戏数据更新包, 等等。
基于某个连接创建第一个data channel时, 会通过发送一个{{event("negotiationneeded")}} event来开始重新谈判(renegotiation)。
dataChannel = RTCPeerConnection.createDataChannel(label[, options]);
label
options
{{optional_inline}}RTCDataChannelInit
dictionary RTCDataChannelInit
字典提供以下字段, 用以构造可选的options参数来设置data channel以满足你的需求:
ordered
{{optional_inline}}true
), 或者到达顺序不需要和发送顺序一致 (false
). 默认: true
.maxPacketLifeTime
{{optional_inline}}null
.maxRetransmits
{{optional_inline}}null
.protocol
{{optional_inline}}""
. This string may not be longer than 65,535 bytes.negotiated
{{optional_inline}}false
), data channels are negotiated in-band, where one side calls createDataChannel
, and the other side listens to the {{domxref("RTCDataChannelEvent")}} event using the ondatachannel
EventHandler
. Alternatively (true
), they can be negotiated out of-band, where both sides call createDataChannel
with an agreed-upon id. Default: false
.id
{{optional_inline}}The options which can be configured using the RTCDataChannelInit
dictionary represent the script-settable subset of the properties on the {{domxref("RTCDataChannel")}} interface.
A new {{domxref("RTCDataChannel")}} object with the specified label
, configured using the options specified by options
if that parameter is included; otherwise, the defaults listed above are established.
InvalidStateError
TypeError
id
is 65535. While this is a valid unsigned 16-bit value, it's not a permitted value for id
.SyntaxError
maxPacketLifeTime
and maxRetransmits
options. You may only specify a non-null
value for one of these.ResourceInUse
id
was specified, but another {{domxref("RTCDataChannel")}} is already using the same value.OperationError
id
is already in use or, if no id
was specified, the WebRTC layer was unable to automatically generate an ID because all IDs are in use.This example shows how to create a data channel and set up handlers for the {{event("open")}} and {{event("message")}} events to send and receive messages on it (For brievity, the example assumes onnegotiationneeded is set up).
// Offerer side var pc = new RTCPeerConnection(options); var channel = pc.createDataChannel("chat"); channel.onopen = function(event) { channel.send('Hi you!'); } channel.onmessage = function(event) { console.log(event.data); }
// Answerer side var pc = new RTCPeerConnection(options); pc.ondatachannel = function(event) { var channel = event.channel; channel.onopen = function(event) { channel.send('Hi back!'); } channel.onmessage = function(event) { console.log(event.data); } }
Alternatively, more symmetrical out-of-band negotiation can be used, using an agreed-upon id (0 here):
// Both sides var pc = new RTCPeerConnection(options); var channel = pc.createDataChannel("chat", {negotiated: true, id: 0}); channel.onopen = function(event) { channel.send('Hi!'); } channel.onmessage = function(event) { console.log(event.data); }
For a more thorough example showing how the connection and channel are established, see A simple RTCDataChannel sample.
Specification | Status | Comment |
---|---|---|
{{SpecName('WebRTC 1.0', '#widl-RTCPeerConnection-createDataChannel-RTCDataChannel-DOMString-label-RTCDataChannelInit-dataChannelDict', 'createDataChannel()')}} | {{Spec2('WebRTC 1.0')}} | Initial definition. |
{{Compat("api.RTCPeerConnection.createDataChannel")}}