emi*_*mil 5 javascript websocket
似乎websocket在断开连接时缓冲消息,并在连接后立即发送消息.
我可以看到bufferedAmountwebsocket正在增加,但它是只读的.
有没有办法重置缓冲区,以便在断开连接时发送的消息不会自动发送?
我认为您正在寻找的方法是确保该readyState属性等于 1:
if(ws.readyState == 1)
ws.send("hi!");
Run Code Online (Sandbox Code Playgroud)
这将防止在 Websocket 断开连接时进行缓冲。
您还可以包装原始函数以强制执行此行为,而无需更改其他代码:
ws._original_send_func = ws.send;
ws.send = function(data) {
if(this.readyState == 1)
this._original_send_func(data);
}.bind(ws);
Run Code Online (Sandbox Code Playgroud)
另请注意,这可能是浏览器特定的问题。我在 safari 上对此进行了测试,但我不知道为什么 Safari 在 Web 套接字断开连接后会缓冲数据。
注意:reconnect我不知道有任何API。浏览器使用新的 Websocket 对象重新连接。
连接丢失后缓冲的数据不会去任何地方,因为它与特定的(现已过时的)WebSocket 对象相关联。
整个 WebSocket 对象应该被删除(连同它的缓冲区)或由垃圾收集器收集(确保删除对对象的任何现有引用),否则数据将继续存在于内存中。
| 归档时间: |
|
| 查看次数: |
4981 次 |
| 最近记录: |