IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> websocket完成心跳功能 -> 正文阅读

[网络协议]websocket完成心跳功能

前端webscoket完成心跳


项目里面需要用到心跳功能,第一版使用延时器写的,发现并不能准时请求,于是用socket代替了,代码如下:

setHeartWs(){
	// 因为传值用到了token,就这么取值了,不用可以去掉
        console.log(this.tokenService.getPayload());
        const token_:any = this.tokenService.getPayload();
        let message = `${token_.userId}_${token_.clientIp}`;
        let lockReconnect = false; // 避免重复连接
        // 根据当前协议类型区分是ws还是wss
        let protocol: any;
        if (window.location.protocol === 'http:') {
            protocol = window.location.protocol.replace('http', 'ws');
        } else if (window.location.protocol === 'https:') {
            protocol = window.location.protocol.replace('https', 'wss');
        }
        const host = window.location.host;
        // 这是后台接口路径
        const path = 'ping';
        let ws:WebSocket;
        // 定时器number
        let tt = 0;
        // 创建ws
        function creatWs(){
            try{
                ws = new WebSocket(`${protocol}//${host}/${path}`);
                init();
            }catch(e){
            	// 如果出错重新连接
                reconnect();
            }
        }
        // 初始化
        function init(){
            ws.onopen = function(){
            	// 发送消息
                ws.send(message);
                // 心跳检测重置
                heartCheck.start();
            };
            ws.onmessage = function(event){
                // 心跳检测重置
                heartCheck.start();
            }
            ws.onerror = function(event){
                // 心跳检测重置
                console.log('出错了');
            }
        }

        // 重新连接
        function reconnect() {
            if(lockReconnect) {
                return;
            };
            lockReconnect = true;
            //没连接上会一直重连,设置延迟避免请求过多
            // 清空延时器
            tt && clearTimeout(tt);
            tt = setTimeout(function () {
            	// 5秒后又继续创建连接  
                creatWs();
                lockReconnect = false;
            }, 5000);
        }

        //心跳检测
        var heartCheck = {
            timeout: 5000,
            timeoutObj: null,
            serverTimeoutObj: null,
            start: function(){
                var that = this;
                this.timeoutObj && clearTimeout(this.timeoutObj);
                this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
                this.timeoutObj = setTimeout(function(){
                    //这里发送一个心跳,后端收到后,返回一个心跳消息,
                    ws.send(message);//可以给后台发送参数
                    that.serverTimeoutObj = setTimeout(function() {
                        console.log(ws);
                        ws.close();
                    }, that.timeout);
                }, this.timeout)
            }
        }
        creatWs();
    }

借鉴了网友的力量,加油啊。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-23 11:11:55  更:2021-07-23 11:13:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:50:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码