Andrew给出的解决方案并不完全有效,因为在失去连接的情况下,服务器可能会发送几个关闭事件。
在这种情况下,您将设置多个设置Timout。Andrew 给出的解决方案可能只有在服务器在五秒前准备就绪时才有效。
然后,基于Andrew解决方案,重新设计,我使用了setInterval将ID附加到窗口对象(这样它就可以在“任何地方”使用):
var timerID=0;
var socket;
/* Initiate what has to be done */
socket.onopen=function(event){
/* As what was before */
if(window.timerID){ /* a setInterval has been fired */
window.clearInterval(window.timerID);
window.timerID=0;
}
/* ... */
}
socket.onclose=function(event){
/* ... */
if(!window.timerID){ /* Avoid firing a new setInterval, after one has been done */
window.timerID=setInterval(function(){start(websocketServerLocation)}, 5000);
}
/* That way, setInterval will be fired only once after losing connection */
/* ... */
}