gpt4 book ai didi

javascript - 如何等待 WebSocket readyState 改变

转载 作者:IT王子 更新时间:2023-10-29 03:16:54 45 4
gpt4 key购买 nike

我正在尝试实现一个回退到轮询的 WebSocket。如果 WebSocket 连接成功,readyState 变为 1,但如果失败,readyState 为 3,我应该开始轮询了。

我试过这样的:

var socket = new WebSocket(url);
socket.onmessage = onmsg;
while (socket.readyState == 0)
{
}
if (socket.readyState != 1)
{
// fall back to polling
setInterval(poll, interval);
}

我期待 socket.readyState 异步更新,并允许我立即阅读它。然而,当我运行它时,我的浏览器卡住了(我在放弃之前让它打开了大约半分钟)。

我以为可能有一个 onreadyStateChanged 事件,但我没有在 MDN 引用中看到一个。

我应该如何实现它?显然,一个空循环是行不通的,并且没有为此发生的事件。

最佳答案

这很简单,而且效果很好……您可以添加有关最大时间或尝试次数的条件,以使其更健壮……

function sendMessage(msg){
// Wait until the state of the socket is not ready and send the message when it is...
waitForSocketConnection(ws, function(){
console.log("message sent!!!");
ws.send(msg);
});
}

// Make the function wait until the connection is made...
function waitForSocketConnection(socket, callback){
setTimeout(
function () {
if (socket.readyState === 1) {
console.log("Connection is made")
if (callback != null){
callback();
}
} else {
console.log("wait for connection...")
waitForSocketConnection(socket, callback);
}

}, 5); // wait 5 milisecond for the connection...
}

关于javascript - 如何等待 WebSocket readyState 改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13546424/

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