RTCDataChannel: close() 方法

Baseline 已广泛支持

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

RTCDataChannel.close() 方法用于关闭 RTCDataChannel。任何一方都可以调用此方法来发起通道关闭。

数据通道的关闭并非瞬时完成。关闭连接的大部分过程是异步处理的;您可以通过监听数据通道上的 close 事件来检测通道何时已完成关闭。

调用此方法后发生的事件顺序:

  1. RTCDataChannel.readyState 设置为 closing
  2. 建立一个后台任务来处理以下剩余步骤,并且 close() 方法返回给调用者。
  3. 传输层处理任何已缓冲的消息;协议层决定是发送还是丢弃它们。
  4. 底层数据传输被关闭。
  5. RTCDataChannel.readyState 属性设置为 closed
  6. 如果传输关闭时发生错误,则 RTCDataChannel 会收到一个 error 事件,其 name 设置为 NetworkError
  7. 向通道发送一个 close 事件。

语法

js
close()

参数

无。

返回值

无(undefined)。

示例

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

dc.onmessage = (event) => {
  console.log(`received: ${event.data}`);
  dc.close(); // We decided to close after the first received message
};

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

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

// Now negotiate the connection and so forth…

规范

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

浏览器兼容性

另见