csx770880 2019-11-15 09:52 采纳率: 0%
浏览 1933
已结题

websocket心跳重连失败,回调了onOpen后立刻onClose

var urlHead = "http://127.0.0.1:8081";//请求接口url头部
var webSoketHead = "127.0.0.1:8081";//soket链接ip+端口号+项目名称

var userId=loginAccount.accountId;

var webSoketUrl = "ws://" + webSoketHead + "/LLWS/"+userId;

var socket = null;  // 判断当前浏览器是否支持WebSocket
if ('WebSocket' in window) {
    socket = new WebSocket(webSoketUrl);
} else {
    alert('该浏览器不支持本系统即时通讯功能,推荐使用谷歌或火狐浏览器!');
}

var id = setInterval(function(){
    console.log("心跳连接");
    var heartMessage={
         "to":{
               "id":userId,
               "type":"heartContent"
         }
       }
   try{
       if(socket.readyState != 3){
           socket.send(JSON.stringify(heartMessage));   //发送消息倒Socket服务
       }else{
           heartContent();
           init();
           socket.send(JSON.stringify(heartMessage));
       }
   }catch(err){
       console.log(err);
       setTimeout(function(){ socket.send(JSON.stringify(heartMessage)); }, 5000);
   }
}, 30000)


function heartContent(){
//  socket.close();
    socket = new WebSocket(webSoketUrl);
}

function init(){
    layui.use('layim', function(layim){
        // 连接发生错误的回调方法
        socket.onerror = function(res) {
            console.log("llws连接失败!");
//          heartContent();
//          init();

        };
        // 连接成功建立的回调方法
        socket.onopen = function(event) {
            console.log("llws连接成功!");
        }

        // 接收到消息的回调方法
        socket.onmessage = function(res) {
//          console.log("llws收到消息啦:" +res.data);

            if(res.data == "保持连接中"){
                heartCheck.reset();
            }else{
                res = eval("("+res.data+")");
                if(res.type == 'friend' || res.type == 'group'){
                    layim.getMessage(res);
                }else{
                    layim.setFriendStatus(res.id,res.content);
                }
            }
        }

        // 连接关闭的回调方法
        socket.onclose = function(res) {
            console.log("llws关闭连接!");
//          heartContent();
//          init();
        }
    });
}
```![图片说明](https://img-ask.csdn.net/upload/201911/15/1573782215_619011.png)
![图片说明](https://img-ask.csdn.net/upload/201911/15/1573782298_769696.png)
服务器刚重启的时候一切都是正常的,时间长了几个小时后吧大概,就出现了readyState永远是3不会变成1了

服务端不断进入@onError
![图片说明](https://img-ask.csdn.net/upload/201911/15/1573782654_761023.png)

求大神解决!
  • 写回答

1条回答 默认 最新

  • qq_28138713 2019-11-15 14:20
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥15 MCNP里如何定义多个源?
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services