RTCDataChannel: send() 方法

send() 方法是 RTCDataChannel 接口的方法,用于通过数据通道将数据发送到远程对等体。 这可以在除创建底层传输通道的初始过程之外的任何时间进行。 在连接之前发送的数据会在可能的情况下进行缓冲(或者如果不可能,则会发生错误),并且在连接正在关闭或已关闭时发送的数据也会进行缓冲。

注意:不同的浏览器对可以发送的消息大小有不同的限制。 存在规范来定义如何自动将大型消息分割,但并非所有浏览器都实现了这些规范,并且已实现的规范也有各种额外的限制。 这将随着时间的推移而变得不那么复杂,但就目前而言,如果您有任何疑问,请参阅 了解消息大小限制.

语法

js
send(data)

参数

data

要通过连接传输的数据。 这可能是一个字符串、一个 Blob、一个 ArrayBuffer、一个 TypedArray 或一个 DataView 对象。

返回值

无 (undefined).

异常

InvalidStateError DOMException

当数据通道尚未完成建立其自身的连接(即,其 readyStateconnecting)时抛出。 数据通道必须建立其自身的连接,因为它使用的传输通道与媒体内容的传输通道不同。 此错误在未发送或缓冲 data 时发生。

NetworkError DOMException

当指定的 data 需要缓冲,但缓冲区中没有足够的空间时抛出。 在这种情况下,底层传输会立即关闭。

TypeError

如果指定的 data 对另一个对等体来说太大而无法接收,则会抛出。 由于存在多种将大型数据分解为更小块进行传输的技术,因此可能会遇到另一个对等体不支持相同技术的场景。 例如,如果一个对等体是支持使用 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

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅