Javascript WebSocket retrys是否有限制?

Javascript WebSocket retrys是否有限制?,javascript,html,error-handling,websocket,Javascript,Html,Error Handling,Websocket,我正在编写一段JavaScript代码,以便与定制的C#web套接字服务器进行对话,根据,我将按照推荐的做法重试连接 当JS准备好时,服务器可能还没有准备好,所以我需要做的是继续尝试连接到websocket,直到它最终成功 推荐做法告诉我,我需要捕获onclose事件或onerror事件,在这两种情况下,尝试重新连接,最好使用某种退避策略 基于此建议,我提出了以下代码: <html> <head> <title>WS</title

我正在编写一段JavaScript代码,以便与定制的C#web套接字服务器进行对话,根据,我将按照推荐的做法重试连接

当JS准备好时,服务器可能还没有准备好,所以我需要做的是继续尝试连接到websocket,直到它最终成功

推荐做法告诉我,我需要捕获onclose事件或onerror事件,在这两种情况下,尝试重新连接,最好使用某种退避策略

基于此建议,我提出了以下代码:

<html>
    <head>
        <title>WS</title>
    </head>
    <body>
        <h1>WS</h1>

        <button onclick="init()">Connect</button>
        <button onclick="deInit()">Disconnect</button>
        <button onclick="send()">Message</button>

        <script>

            var mySocket;

            function init(){

                mySocket = new WebSocket("ws://localhost:9000/foolish");

                mySocket.onopen = function(){
                    console.log("OPEN");
                };

                mySocket.onclose = function(status){
                    console.log("CLOSE");
                    console.log(status);
                    if(status.code === 1006){
                        mySocket = new WebSocket("ws://localhost:9000/foolish");
                    }
                };

                mySocket.onerror = function(err){
                    console.log("ERROR");
                    console.log(err);
                };

                mySocket.onmessage = function(msg){
                    console.log("MESSAGE");
                    console.log(msg);
                };

            }

            function deInit(){

                mySocket.close();

            }

            function send(){

                mySocket.Send("foo");

            }

        </script>

    </body>
</html>

WS
WS
连接
断开
消息
var mySocket;
函数init(){
mySocket=newwebsocket(“ws://localhost:9000/9000”);
mySocket.onopen=函数(){
控制台日志(“打开”);
};
mySocket.onclose=功能(状态){
控制台日志(“关闭”);
控制台日志(状态);
如果(status.code==1006){
mySocket=newwebsocket(“ws://localhost:9000/9000”);
}
};
mySocket.onerror=函数(err){
控制台日志(“错误”);
控制台日志(err);
};
mySocket.onmessage=函数(msg){
控制台日志(“消息”);
控制台日志(msg);
};
}
函数deInit(){
mySocket.close();
}
函数send(){
mySocket.Send(“foo”);
}
Iv'e尝试在错误处理程序中执行重新连接,并附加到“setTimeOut”调用,输出总是相同的

我的事件处理程序,触发一次,重新尝试连接,但第二次失败时,没有一个事件处理程序被触发,我只看到一次失败的尝试,如下图所示:

我读到的所有内容都告诉我,每当我重试并且连接失败时,我的错误处理程序和/或关闭处理程序应该会继续启动,允许我选择处理错误,但它不会,它会尝试两次并放弃

这发生在IE11、IE10、Chrome50+和FireFox的最新版本中

考虑到它在不同浏览器之间的一致性,我猜这要么是设计上的,要么是我做错了什么,但我真的不知道问题出在哪里


如果有人有任何想法,如果您能为我指出正确的方向,我将不胜感激。

当您在关闭时创建新实例时,您不会重新应用事件处理程序。

当您在关闭时创建新实例时,您当然不会重新应用事件处理程序。我他妈的怎么会错过那一个:-)真是太棒了。总是简单的事情,不是吗,当然。我他妈的怎么会错过那一个:-)真是太棒了。总是简单的事情,不是吗。