gpt4 book ai didi

javascript - 如何清除 websocket 上的缓冲区?

转载 作者:搜寻专家 更新时间:2023-11-01 04:13:02 24 4
gpt4 key购买 nike

好像是websocket在断线的时候缓存消息,一连接就发送。

我可以看到 websocket 的 bufferedAmount 正在增加,但它是只读的。

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

最佳答案

我认为您正在寻找的方法是确保 readyState attribute等于 1:

if(ws.readyState == 1)
ws.send("hi!");

这将在 Websocket 断开连接时阻止缓冲。

您还可以包装原始函数以在不更改其他代码的情况下强制执行此行为:

ws._original_send_func = ws.send;
ws.send = function(data) {
if(this.readyState == 1)
this._original_send_func(data);
}.bind(ws);

另请注意,这可能是特定于浏览器的问题。我在 safari 上对此进行了测试,我不知道为什么 Safari 在网络套接字断开连接后缓冲数据。

注意:据我所知,没有reconnect API。浏览器使用新的 Websocket 对象重新连接。

缓冲数据在连接丢失后不会去任何地方,因为它与特定的(现已过时的)WebSocket 对象相关联。

整个 WebSocket 对象应该被删除(与其缓冲区一起)或由垃圾收集器收集(确保删除对该对象的所有现有引用),否则数据将保留在内存中。

关于javascript - 如何清除 websocket 上的缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47897486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com