gpt4 book ai didi

websocket 连接未关闭

转载 作者:行者123 更新时间:2023-12-01 18:18:12 30 4
gpt4 key购买 nike

我想定期尝试打开 Websocket 连接,直到成功。所以我每 5 秒尝试一次,最初似乎有效,持续大约一分钟左右。即在服务器禁用的情况下,尝试连接,然后立即关闭,readyState 设置为 3,然后 5 秒后,再次尝试,另一个相同的响应。但一两分钟后,它不再关闭连接,它只是卡在连接状态(readyState==0)。

function wsConnect()
{
console.log("trying to connect...");
var socket = new WebSocket("wss://blahblah.com");
socket.onopen=function(){console.log("open");};
socket.onerror=function(){console.log("error");};
socket.onclose=function(msg){console.log("close");};

setTimeout(function(){console.log("RS:"+socket.readyState);socket.close();wsConnect();},5000);
}

有趣的是,如果我随后启动服务器,它会被数十个连接命中,大概所有导致readyState 0的连接都会排队。有什么方法可以完全粉碎杀死破坏就绪状态 0 连接吗?无法关闭它,因为它没有打开。

或者,如何定期进行连接尝试,以便在服务器可用时进行连接,但当我只需要一个连接时,又不会用大量连接轰炸服务器?

浏览器:chrome

一旦它开始响应就绪状态 0,即使页面刷新也无法修复它。只有进入一个全新的域然后再返回,它似乎才会重置。

最佳答案

我相信您不应该尝试另一个连接,直到第一个连接关闭,然后在 onclose 事件中执行重新连接。这样,除非第一个连接失败,否则您将不会创建另一个连接。

function wsConnect()
{
console.log("trying to connect...");
var socket = new WebSocket("wss://blahblah.com");
socket.onopen = function() { console.log("open"); };
socket.onerror = function() { console.log("error"); };
socket.onclose = function(msg) {
console.log("close");
setTimeout(wsConnect, 5000);
};
}

关于websocket 连接未关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11920089/

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