我正在尝试实现具有回退轮询功能的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/