js websocket心跳

var heartCheck = {
    pongTime: 30 * AP.SECOND, //30秒接收心跳
    pingTime: (30 * AP.SECOND / 10) * 8,
    timeoutObj: null,
    serverTimeoutObj: null,
    reset: function () {
        // clearTimeout(this.timeoutObj);
        clearTimeout(this.serverTimeoutObj);
        return this;
    },
    PingStart: function () {
        var self = this;
        this.timeoutObj = setTimeout(function () {
            //这里发送一个心跳,后端收到后,返回一个心跳消息,
            //onmessage拿到返回的心跳就说明连接正常
            if (WEB_SOCKET != null && WEB_SOCKET.readyState == WebSocket.OPEN) {
                console.log("心跳发送PING");
                WEB_SOCKET.send("PING")
                self.PingStart();
            }
        }, this.pingTime) //10秒发送一次心跳
    },
    PongStart: function () {
        var self = this;
        self.serverTimeoutObj = setTimeout(function () { //如果超过一定时间还没重置,说明后端主动断开了
            if (WEB_SOCKET != null) {
                console.log("服务器30秒没有响应,关闭连接")
                WEB_SOCKET.close();
            }
        }, self.pongTime)
    }
}
WEB_SOCKET = new WebSocket("ws://88.gaoqiaoxue.com/v5/apipost.io?userToken=" + AP.USER.userIndendify);

                WEB_SOCKET.onopen = function (evt) {
                    console.log("连接成功,发送ping");
                    WEB_SOCKET.send("PING")
                    heartCheck.PingStart();
                    heartCheck.reset().PongStart(); //打开心跳检测
                };
                WEB_SOCKET.onerror = function (err) {
                    console.log(err);
                    if (WEB_SOCKET != null) {
                        console.log("异常,关闭连接", err);
                        WEB_SOCKET.close();
                    }
                    reject(err)
                }
                WEB_SOCKET.onmessage = function (evt) {
                    if (WEB_SOCKET != null) {
                        heartCheck.reset().PongStart(); //拿到任何消息都说明当前连接是正常的 心跳检测重置
                    }
                };

                WEB_SOCKET.onclose = function (evt) {
                    console.log("Connection closed.");
                };



//自动重连机制 也和这个差不多,后面在发出来
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JS中的WebSocket心跳包是一种保持WebSocket连接活动的机制。通过定期发送心跳消息,可以确保WebSocket连接持续有效,避免连接断开。 在引用中提到了WebSocket心跳包机制,它可以通过发送心跳消息来维持WebSocket连接的状态。在引用中的代码中,使用了一个名为HeartPongWebSocketF的类来创建WebSocket连接并实现心跳包机制。具体的实现细节需要查看HeartPongWebSocketF类的代码。 另外,在引用中提到了dwebsocket这个模块,它是用来在Django中实现WebSocket服务端的一个第三方模块。它可以用于创建WebSocket连接,并提供了一些功能,包括心跳包机制。 总结来说,JavaScript中的WebSocket心跳包是通过定期发送心跳消息来保持WebSocket连接的活动状态。具体实现可以使用类似HeartPongWebSocketF的库或模块来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Websocket 原理,使用方法,心跳包机制(你想要了解的知识点!)](https://blog.csdn.net/longlong6682/article/details/104536696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [websocket心跳包](https://blog.csdn.net/Beth__hui/article/details/110822899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值