我正在尝试通过 WebRTC 分块发送文件,我想知道是否可以创建一个回调函数以在RTCDataChannel.send()
完成发送文件的每个块后调用。
是RTCDataChannel.send()
同步/阻塞调用吗?如果是这样,我的回调可以在.send()
.
如果.send()
是异步/非阻塞,那么这将变得棘手,因为它似乎不.send()
接受回调函数,我想避免使用缓冲区和超时。
我正在尝试通过 WebRTC 分块发送文件,我想知道是否可以创建一个回调函数以在RTCDataChannel.send()
完成发送文件的每个块后调用。
是RTCDataChannel.send()
同步/阻塞调用吗?如果是这样,我的回调可以在.send()
.
如果.send()
是异步/非阻塞,那么这将变得棘手,因为它似乎不.send()
接受回调函数,我想避免使用缓冲区和超时。
该send
方法是阻塞的。但是,它不会等到数据通过网络传输,而只会将数据放在内部缓冲区中,稍后(或与脚本执行并行)从那里发送数据。
未传输的数据量作为bufferedAmount
属性可用,每次调用都会同步增加send()
(否则在下一个事件循环轮到之前不会更新)。
因此,您可以使包装器异步,并send()
在当前缓冲的数据“太多”时(根据您认为合适的任何标准)在实际调用之前设置一个超时。
如上所述,send() 实际上是异步的——你没有收到送货收据。但是,onbufferedamountlow
当通道耗尽它的发送缓冲区低于设置的值时,会调用一个回调bufferedAmountLowThreshold
(请参阅MDN onbufferedamountlow)
您可以使用该回调来决定何时发送下一个块。
但是请注意,这对于标准草案来说是相对较新的,可能并非所有地方都支持。