如果我通过Blob
方法向JavaScript ArrayBuffer
发送大WebSocket
或send
... send
方法调用阻塞直到发送数据,或者是否将数据副本异步发送以便调用可以立即返回?
根据我的解释,一个相关的(未答复的)问题是,一系列快速发送是否会导致onmessage事件被延迟,正如有人似乎在Mobile Safari中描述的那样:Apparent blocking behaviour in JavaScript websocket on mobile Safari
答案 0 :(得分:6)
根据 bufferedAmount
属性的说明,我推断 send
必须立即返回,否则 {{ 1}} 永远为零。如果它不为零,则必须有先前调用send缓冲的数据,如果发送缓冲数据,则没有理由阻止它。
来自http://dev.w3.org/html5/websockets/
bufferedAmount 属性必须返回的字节数 已排队的应用程序数据(UTF-8文本和二进制数据) 使用 send()但是,从上次启动事件循环开始 执行任务,尚未传输到网络。 (这个 因此包括在执行当前任务期间发送的任何文本, 无论用户代理是否能够传输文本 与脚本执行异步。)这不包括框架 协议产生的开销,或操作完成的缓冲 系统或网络硬件。如果连接关闭,这个 属性的值只会在每次调用 send()时增加 方法(连接关闭后,数字不会重置为零)。
在这个简单的示例中, bufferedAmount 属性用于确保 如果更新是以每50ms一次更新的速率发送的 网络可以处理该速率,或者无论网络速率如何 处理,如果太快。
bufferedAmount
bufferedAmount 属性也可用于使网络饱和 没有以比网络可以处理的更高的速率发送数据, 虽然这需要在一段时间内更仔细地监控属性的值。