WebRTC - RTCDataChannel API
WebRTC - RTCDataChannel API
Section titled “WebRTC - RTCDataChannel API”WebRTC 不仅擅长流式传输音频和视频,也擅长在对等端之间传输任意数据。RTCDataChannel 对象是实现此能力的关键,它支持低延迟的点对点数据交换。
RTCDataChannel API 概述
Section titled “RTCDataChannel API 概述”RTCDataChannel 可以配置为可靠(如 TCP)或不可靠(如 UDP),以及有序或无序。这种灵活性使其适用于广泛的应用,从文件共享、游戏到文本聊天和实时传感器数据。
label(只读字符串): 返回通道创建时为其分配的名称。对于区分多个数据通道非常有用。ordered(只读布尔值): 如果通道保证消息顺序,返回true,否则返回false。在创建时设置。protocol(只读字符串): 返回正在使用的子协议名称(如果有的话)。这是一个应用程序定义的字符串。id(只读无符号短整型?): 返回通道的唯一数字 ID,由浏览器分配。如果通道尚未协商或与底层 SCTP 流关联,则可能为 null。readyState(只读字符串): 返回表示通道当前状态的枚举 (RTCDataChannelState)。可能的值包括:-
* `"connecting"`: 通道尚未打开,但正在连接过程中。这是新创建通道的初始状态。
-
* `"open"`: 通道已打开并准备发送和接收消息。
-
* `"closing"`: 通道正在关闭过程中。
-
* `"closed"`: 通道已关闭或无法建立。
bufferedAmount(只读无符号长整型): 返回当前排队等待发送但尚未传输的数据字节数。此值随着数据通过网络发送而减少。bufferedAmountLowThreshold(无符号长整型): 一个可配置的阈值。当bufferedAmount低于此值时,会触发bufferedamountlow事件。这可用于流量控制。binaryType(字符串): 指定用于表示在通道上接收到的二进制数据的 JavaScript 对象类型。可设置为"blob"或"arraybuffer"。如果未指定接收数据的类型,默认为"blob",但发送时,send()接受 String、Blob、ArrayBuffer 或 ArrayBufferView。maxPacketLifeTime(只读无符号短整型?): 对于不可靠通道,指示通道在放弃之前尝试传输或重传消息的最大时间(毫秒)。与maxRetransmits互斥。maxRetransmits(只读无符号短整型?): 对于不可靠通道,指示通道在消息未收到确认时尝试重传消息的最大次数。与maxPacketLifeTime互斥。negotiated(只读布尔值): 如果通道是应用程序带外协商的(例如,通过信令预先约定特定的 ID),返回true,否则(如果是由 WebRTC 本身带内协商的)返回false。默认为false。reliable(只读布尔值): 此属性已弃用。请使用ordered和 (maxPacketLifeTime或maxRetransmits) 来确定可靠性特性。历史上,它指示通道是否配置为可靠传输。
注意:某些属性(如 maxPacketLifeTime 和 maxRetransmits)在使用 RTCPeerConnection.createDataChannel(label, options) 创建数据通道时配置。
事件处理程序
Section titled “事件处理程序”onopen: 在触发open事件时调用的事件处理程序。这表明数据通道已成功建立并准备好进行通信。onmessage: 在触发message事件时调用的事件处理程序。当从远端对等端接收到消息时发生。事件对象包含一个data属性,其中包含接收到的消息(String、Blob 或 ArrayBuffer,取决于binaryType和发送的内容)。onbufferedamountlow: 在触发bufferedamountlow事件时调用的事件处理程序。当bufferedAmount低于bufferedAmountLowThreshold时发生。onclosing: 在触发closing事件时调用的事件处理程序。这表明通道正在关闭过程中。它在onclose事件之前触发。onclose: 在触发close事件时调用的事件处理程序。这表明数据通道已关闭。onerror: 在触发error事件时调用的事件处理程序。当数据通道上遇到错误时发生。事件对象可能包含详细信息。
close(): 启动数据通道的关闭。这将最终导致readyState变为"closing",然后是"closed"。send(data): 通过通道向远端对等端发送数据。data参数可以是 DOMString、Blob、ArrayBuffer 或 ArrayBufferView。浏览器将处理适当的序列化用于传输。
理解这些 API 对于构建利用 WebRTC 数据传输能力的应用程序至关重要。后续章节将通过实际示例演示如何使用 RTCDataChannel,例如文本聊天应用程序。
有关更多详细信息,请始终参考最新的 W3C WebRTC 规范和 MDN Web Docs 中关于 RTCDataChannel 的文档。