RTCDataChannel: send() 方法

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2020 年 1 月⁩ 起,所有主流瀏覽器均已支援。

RTCDataChannel 介面的 send() 方法將資料透過資料通道傳送到遠端對等方。此操作可以在任何時候進行,除了在底層傳輸通道的初始建立過程中。在連線建立之前傳送的資料會被儘可能地緩衝(如果不可能則會發生錯誤),同時在連線關閉或已關閉期間傳送的資料也會被緩衝。

注意: 不同瀏覽器對您傳送的訊息大小限制不同。規範中定義瞭如何自動分片大訊息,但並非所有瀏覽器都實現了這些規範,即使實現了也可能存在各種額外的限制。隨著時間的推移,這種情況會變得更簡單,但目前,如果您有疑問,請參閱 理解訊息大小限制

語法

js
send(data)

引數

data

要在連線上傳輸的資料。它可以是字串、BlobArrayBufferTypedArrayDataView 物件。

返回值

無(undefined)。

異常

InvalidStateError DOMException

當資料通道尚未完成建立自己的連線時(即,其 readyStateconnecting)會丟擲此異常。資料通道必須建立自己的連線,因為它使用與媒體內容不同的傳輸通道。此錯誤會在不傳送或緩衝 data 的情況下發生。

OperationError DOMException

當指定的資料需要被緩衝,但緩衝區中沒有足夠空間時會丟擲此異常。

TypeError

如果指定的資料對於接收方而言過大,將丟擲此異常。由於存在多種將大資料拆分成小塊進行傳輸的技術,因此可能會遇到接收方不支援相同分片技術的情況。例如,如果一方是支援使用 EOR(記錄結束)標誌來指示已接收訊息是否為使用 send() 傳送的多部分物件的最後一部分的現代瀏覽器。有關訊息大小限制的更多資訊,請參閱 理解訊息大小限制

示例

在此示例中,建立了一個名為 sendMessage() 的例程;它接受一個物件作為輸入,並透過 RTCDataChannel 將指定物件和時間戳的 JSON 字串傳送到遠端對等方。

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

function sendMessage(msg) {
  const obj = {
    message: msg,
    timestamp: new Date(),
  };
  dc.send(JSON.stringify(obj));
}

規範

規範
WebRTC:瀏覽器中的即時通訊
# dom-rtcdatachannel-send

瀏覽器相容性

另見