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

瀏覽器相容性

另見