RTCDataChannel

Baseline 广泛可用 *

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流浏览器均已支持。

* 此特性的某些部分可能存在不同级别的支持。

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

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

RTCDataChannel 是一个 可转移对象

EventTarget RTCDataChannel

实例属性

还继承了 EventTarget 的属性。

binaryType

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

bufferedAmount 只读

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

bufferedAmountLowThreshold

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

id 只读

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

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

浏览器兼容性

另见