RTCDataChannel

基线 广泛可用

此功能已得到良好确立,并且可在许多设备和浏览器版本上运行。它自以下日期起在各浏览器中可用: 2020 年 1 月.

RTCDataChannel 接口表示一个网络通道,可用于任意数据的双向点对点传输。每个数据通道都与一个 RTCPeerConnection 关联,并且每个对等连接最多可以拥有理论上 65,534 个数据通道(实际限制可能因浏览器而异)。

要创建数据通道并请求远程对等方加入,请调用 RTCPeerConnectioncreateDataChannel() 方法。被邀请交换数据的对等方会收到一个 datachannel 事件(类型为 RTCDataChannelEvent),以告知数据通道已添加到连接中。

RTCDataChannel 是一个 可传输对象

EventTarget RTCDataChannel

实例属性

还继承了 EventTarget 的属性。

binaryType

一个字符串,指定用于表示在 RTCDataChannel 上接收到的二进制数据的对象的类型。值与 WebSocket.binaryType 属性允许的值相同:如果使用 Blob 对象,则为 blob;如果使用 ArrayBuffer 对象,则为 arraybuffer。默认值为 blob

bufferedAmount 只读

返回当前排队等待通过数据通道发送的数据的字节数。

bufferedAmountLowThreshold

指定被视为“低”的缓冲输出数据的字节数。默认值为 0。

id 只读

返回一个 ID 号码(介于 0 和 65,534 之间),该号码唯一标识 RTCDataChannel

label 只读

返回一个包含描述数据通道名称的字符串。这些标签不需要唯一。

maxPacketLifeTime 只读

返回浏览器尝试传输消息允许花费的时间(以毫秒为单位),如创建数据通道时设置的那样,或 null

maxRetransmits 只读

返回浏览器在放弃之前应尝试重新传输消息的最大次数,如创建数据通道时设置的那样,或 null,表示没有最大值。

negotiated 只读

指示 RTCDataChannel 的连接是由 Web 应用程序 (true) 协商还是由 WebRTC 层 (false) 协商。默认为 false

ordered 只读

指示数据通道是否保证按顺序传递消息;默认为 true,表示数据通道确实是有序的。

protocol 只读

返回一个包含正在使用的子协议名称的字符串。如果在创建数据通道时未指定任何协议,则此属性的值为空字符串 ("")。

readyState 只读

返回一个字符串,指示数据通道的基础数据连接的状态。它可以具有以下值之一:connectingopenclosingclosed

已弃用的属性

reliable 只读 已弃用 非标准

指示数据通道是否可靠

实例方法

还继承了 EventTarget 的方法。

close()

关闭 RTCDataChannel。任何一方都可以调用此方法来启动通道的关闭。

send()

通过数据通道向远程对等方发送数据。

事件

bufferedamountlow

当传出数据缓冲区中的数据字节数低于 bufferedAmountLowThreshold 指定的值时发送。

close

当基础数据传输关闭时发送。

closing

当基础数据传输即将开始关闭时发送。

error

当数据通道发生错误时发送。

message

当从远程对等方收到消息时发送。消息内容可以在事件的 data 属性中找到。

open

当数据通道首次打开或现有数据通道的基础连接重新打开时发送。

数据格式

基础数据格式由 IEEE 规范 SDP Offer/Answer Procedures for SCTP over DTLS Transport(RFC 8841) 定义。当前格式将协议指定为 "UDP/DTLS/SCTP"(UDP 承载 DTLS 承载 SCTP)或 "TCP/DTLS/SCTP"(TCP 承载 DTLS 承载 SCTP)。旧版浏览器可能仅指定 "DTLS/SCTP"

示例

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

dc.onmessage = (event) => {
  console.log(`received: ${event.data}`);
};

dc.onopen = () => {
  console.log("datachannel open");
};

dc.onclose = () => {
  console.log("datachannel close");
};

规范

规范
WebRTC:浏览器中的实时通信
# rtcdatachannel

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅