RTCDataChannel是send()同步/阻塞调用吗?

时间:2014-06-06 05:43:17

标签: javascript webrtc file-transfer rtcdatachannel

我试图通过WebRTC以块的形式发送文件,我想知道是否可以在RTCDataChannel.send()完成发送文件的每个块后创建一个回调函数。< / p>

RTCDataChannel.send()是同步/阻止呼叫吗?如果是这样,我的回调可以在.send()之后的行上执行。

如果.send()是异步/非阻塞,那么这将变得棘手,因为它似乎不像.send()接受回调函数,我想避免使用缓冲区和超时。

2 个答案:

答案 0 :(得分:3)

send method正在阻止。然而,它不会等到数据通过线路,而只是将数据放在内部缓冲区之后(或与脚本执行并行)发送。

未传输的数据量可用作bufferedAmount property,每send()次呼叫将同步增加(并且在下一个事件循环转向之前不会更新)。< / p>

因此,您可能会使您的包装器异步,并在当前缓冲的数据“太多”(根据您认为合适的标准)实际调用send()之前设置超时。

答案 1 :(得分:1)

如上所述,send()实际上是异步的 - 您没有收到送货回执。 但是有一个回调onbufferedamountlow,在调用时会调用 通道将其发送缓冲区排在低于bufferedAmountLowThreshold设置的值的位置 (见MDN onbufferedamountlow

您可以使用该回调来决定何时发送下一个块。

但请注意,这对标准草案来说相对较新,可能无法在任何地方得到支持。