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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试