Websocket 重新连接

问题描述

我在连接丢失时重新连接 websocket,因此脚本每 3 秒迭代一次并调用 StartWebsocket 函数直到连接。这很好用,但是...

连接恢复后如果我提交一次FORM,它会多次调用WEBSOCKET.SEND(实际上是调用StartWebsocket函数来恢复连接的次数)。每次执行 WEBSOCKET.SEND 时,日志控制台都会出现错误:“websocket is NULL”。当然它是 NULL,因为我将它设置为 NULL,但是 为什么会为所有以前的 NULL websocket 触发 SEND?

似乎 SEND 尝试了之前尝试打开的所有 websockets...即使它们是 NULL-ed。它们被缓存了吗? websocket 对象的实例没有被破坏?或者是怎么回事?..

这是代码(您需要 websocket 服务器来检查它,因为只有在连接 RESTORE 后才会出现症状)。

<html>
<head>
<script language="javascript" src="libs/jquery-1.9.1.js"></script>

<script>

$(document).ready(function(){

      function StartWebsocket() {

        var websocket = new WebSocket("ws://192.168.1.100:8080/socket.php");            
        setTimeout( function() { if (websocket.readyState == 1) { alert ('CONNECTED'); }},1000);

        websocket.onopen = function(event) { 
          alert ('Open');
        };

        websocket.onmessage = function(event) {
          alert ('Message');
        };
        
        websocket.onerror = function(event){
          alert ('Error');
        };

        websocket.onclose = function(event){
            
          //alert (websocket.readyState + '  ' + WebSocket[0] + ' ' + WebSocket.length);
          websocket.onopen = null; delete websocket.onopen;
              websocket.onerror = null; delete websocket.onerror;
              websocket.onclose = null; delete websocket.onclose;
              websocket.onmessage = null; delete websocket.onmessage;
          websocket = null; delete websocket; 
          //alert (websocket.readyState + '  ' + WebSocket[0] + ' ' + WebSocket.length);

              setTimeout(StartWebsocket,3000);
        }; 
        

        $('#form').on("submit",function(event){
            event.preventDefault();
            
            setTimeout(function(){
              websocket.send('');
            },100);

        }); //FORM SUBMIT

    } //StartWebsocket


StartWebsocket();

});  // FUNCTION DOCUMENT READY

</script>


</head>
<body>

<form name='form' id='form'>
<input type='text' name='message' id=message' placeholder='Message' required /> 
<input type='submit' id='Send' name='send' value='Send' >
</form>


</body>
</html>


解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...