RTCDataChannel: send() 方法
send()
方法是 RTCDataChannel
接口的方法,用于通过数据通道将数据发送到远程对等体。 这可以在除创建底层传输通道的初始过程之外的任何时间进行。 在连接之前发送的数据会在可能的情况下进行缓冲(或者如果不可能,则会发生错误),并且在连接正在关闭或已关闭时发送的数据也会进行缓冲。
注意:不同的浏览器对可以发送的消息大小有不同的限制。 存在规范来定义如何自动将大型消息分割,但并非所有浏览器都实现了这些规范,并且已实现的规范也有各种额外的限制。 这将随着时间的推移而变得不那么复杂,但就目前而言,如果您有任何疑问,请参阅 了解消息大小限制.
语法
send(data)
参数
data
-
要通过连接传输的数据。 这可能是一个字符串、一个
Blob
、一个ArrayBuffer
、一个TypedArray
或一个DataView
对象。
返回值
无 (undefined
).
异常
InvalidStateError
DOMException
-
当数据通道尚未完成建立其自身的连接(即,其
readyState
为connecting
)时抛出。 数据通道必须建立其自身的连接,因为它使用的传输通道与媒体内容的传输通道不同。 此错误在未发送或缓冲data
时发生。 NetworkError
DOMException
-
当指定的
data
需要缓冲,但缓冲区中没有足够的空间时抛出。 在这种情况下,底层传输会立即关闭。 TypeError
-
如果指定的
data
对另一个对等体来说太大而无法接收,则会抛出。 由于存在多种将大型数据分解为更小块进行传输的技术,因此可能会遇到另一个对等体不支持相同技术的场景。 例如,如果一个对等体是支持使用EOR
(记录结束)标志来指示何时接收到的消息是使用send()
发送的多部分对象的最后一块的现代浏览器。 有关消息大小限制的更多信息,请参阅 了解消息大小限制.
示例
在此示例中,创建了一个名为 sendMessage()
的例程; 它接受一个对象作为输入,并通过 RTCDataChannel
将包含指定对象和时间戳的 JSON 字符串发送到远程对等体。
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 的浏览器中加载。