如何清除websocket上的缓冲区?

emi*_*mil 5 javascript websocket

似乎websocket在断开连接时缓冲消息,并在连接后立即发送消息.

我可以看到bufferedAmountwebsocket正在增加,但它是只读的.

有没有办法重置缓冲区,以便在断开连接时发送的消息不会自动发送?

Mys*_*yst 5

我认为您正在寻找的方法是确保该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 对象应该被删除(连同它的缓冲区)或由垃圾收集器收集(确保删除对对象的任何现有引用),否则数据将继续存在于内存中。