RTCDataChannel: send() 方法
RTCDataChannel 接口的 send() 方法将数据通过数据通道发送到远程对等方。此操作可以在任何时候进行,除了在底层传输通道的初始创建过程中。在连接建立之前发送的数据会被尽可能地缓冲(如果不可能则会发生错误),同时在连接关闭或已关闭期间发送的数据也会被缓冲。
注意: 不同浏览器对您发送的消息大小限制不同。规范中定义了如何自动分片大消息,但并非所有浏览器都实现了这些规范,即使实现了也可能存在各种额外的限制。随着时间的推移,这种情况会变得更简单,但目前,如果您有疑问,请参阅 理解消息大小限制。
语法
js
send(data)
参数
- data
- 
要在连接上传输的数据。它可以是字符串、 Blob、ArrayBuffer、TypedArray或DataView对象。
返回值
无(undefined)。
异常
- InvalidStateError- DOMException
- 
当数据通道尚未完成建立自己的连接时(即,其 readyState为connecting)会抛出此异常。数据通道必须建立自己的连接,因为它使用与媒体内容不同的传输通道。此错误会在不发送或缓冲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 | 
浏览器兼容性
加载中…