heartChechInit() {
      const _this = this;
      // 设置统筹管理
      let heartCheck = {
        timer: 0, // 定时器名称
        _obj: null, // ws
        _callback: null, // 执行函数
        _time: 30000, // 心跳间隔
        // 启动函数
        init: function (wsObj, callback) {
          // console.log("init");
          this._obj = wsObj;
          callback && (this._callback = callback);
          this.sayHi();
        },
        sayHi: function () {
          // 执行心跳
          clearTimeout(this.timer);
          this.timer = setTimeout(() => {
            if (1 == this._obj.readyState) {
              this._obj.send(1); // 发送讯息
            }
          }, this._time);
        },
        clear: function (flag) {
          // 关闭
          // console.log("clear:" + this.timer);
          clearTimeout(this.timer);
        },
        onError: function () {
          // 出错
          // console.log("onError:", this.timer);
          this.clear();
          this._callback && this._callback();
        },
      };
      // 通讯地址
      let uri = `ws://${sessionStorage.getItem("heartCheckUrl")}/flow/notice/${
        _this.currentUserID
      }`;
      let ws = new WebSocket(uri);
      // 开始连接
      ws.onopen = (event) => {
        // console.log("ws onopen", event);
        MsgBegin && MsgBegin();
        heartCheck.init(ws, () => {
          console.log("reconnect...");
          ws = new WebSocket(uri);
        });
      };
      // 接收消息
      ws.onmessage = (event) => {
        // console.log("接收消息", event, ws);
        let reg = /[0-9]/;
        if (reg.test(event.data)) {
          _this.value = +event.data;
        } else {
          _this.value = 0;
        }
        heartCheck.sayHi();
      };
      // 连接关闭
      ws.onclose = (event) => {
        // console.log("ws close", event, ws);
        heartCheck.clear();
      };
      // 连接出错
      ws.onerror = (event) => {
        _this.value = 0;
        // console.log("ws error", event, ws);
        heartCheck.onError();
      };
      // 初始请求接收
      let MsgBegin = () => {
        ws.send(1);
      };
    },

ws请求定时的更多相关文章

  1. nginx支持webSocket ws请求

    服务端webSocket的java配置文件: @Override public void registerStompEndpoints(StompEndpointRegistry registry) ...

  2. 使用SoapUI生成WS请求报文

    WSDL地址示例:http://10.1.84.10:8100/webService/common/mail?wsdl   打开SoapUI,创建一个Project,输入wsdl地址就ok. 1.访问 ...

  3. axis2学习, ant 构建axis2 ws

    1,axis2安装(windows)   . 环境需求:jdk 1.5, tomcat 6, maven 2, ant . 下载(bin表示二进制文件):http://mirror.bjtu.edu. ...

  4. Flask(4)- flask请求上下文源码解读、http聊天室单聊/群聊(基于gevent-websocket)

    一.flask请求上下文源码解读 通过上篇源码分析,我们知道了有请求发来的时候就执行了app(Flask的实例化对象)的__call__方法,而__call__方法返回了app的wsgi_app(en ...

  5. flask的请求上下文源码解读

    一.flask请求上下文源码解读 通过上篇源码分析( ---Flask中的CBV和上下文管理--- ),我们知道了有请求发来的时候就执行了app(Flask的实例化对象)的__call__方法,而__ ...

  6. flask 请求上下文源码(转)

    本篇阅读目录 一.flask请求上下文源码解读 二.http聊天室(单聊/群聊)- 基于gevent-websocket 回到顶部 转:https://www.cnblogs.com/li-li/p/ ...

  7. flask 中使用 socket 遇到的坑

    很久没用博客园了,最近涉及到一个问题,需要向前端推送日志 考虑的方案两个,一个是定时ajax 但是这样效率太慢了,二是用socket 那看看有没有轮子咯,面向百度编程,有两个库可以使用 1.flask ...

  8. 【Node/JavaScript】论一个低配版Web实时通信库是如何实现的( WebSocket篇)

    引论 simple-socket是我写的一个"低配版"的Web实时通信工具(相对于Socket.io),在参考了相关源码和资料的基础上,实现了前后端实时互通的基本功能 选用了Web ...

  9. 利用WebSocket和EventSource实现服务端推送

    可能有很多的同学有用 setInterval 控制 ajax 不断向服务端请求最新数据的经历(轮询)看下面的代码: setInterval(function() { $.get('/get/data- ...

随机推荐

  1. Arduino+ESP32 之 SD卡读写

    背景知识: ESP32有两种使用SD卡的方法,一种是使用SPI接口访问SD卡,另一种是使用SDMMC接口访问SD卡 . Arduino core for the ESP32中SPI方式占用4个IO口, ...

  2. hashmap 实现 相同的key值时,value值叠加效果。

    一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...

  3. springboot 添加mybatisjar包发生的异常问题?

    一.pro.xml文件中,添加mybatisjar包 <?xml version="1.0" encoding="UTF-8"?> <proj ...

  4. checklist 编写指南

    checklist 编写工具 checklist文档格式推荐使用思维导图.比如 MindMaster 和 processon.我喜欢用这些平台或者软件的思维导图大纲模式来编写 checklist. c ...

  5. 羽夏看Win系统内核——同步篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  6. AT2699 [ARC081D] Flip and Rectangles

    以下是简要题解: 首先思考如何判定一个矩形是否能通过操作变成全黑. 首先从简单而又特殊的 \(2 \times 2\) 的矩形开始,不难发现只要其中黑色数量不为奇数即可. 近一步拓展可以发现,一个矩形 ...

  7. python基础篇-爬虫urlparse使用及简单示例

    >>> from urllib.parse import urlparse >>> o = urlparse('http://www.cwi.nl:80/%7Egu ...

  8. Throwable以及错误

    /* 异常的体系: ----------| Throwable 所以异常或者错误类的超类 --------------|Error 错误 错误一般是用于jvm或者是硬件引发的问题,所以我们一般不会通过 ...

  9. MATLAB基础学习(2)

    function result=mysum(a,b)%创建函数以及外部接口 s=0; for i=a:b s=s+i; end result=s; disp(s); end Matlab中ones() ...

  10. Solution -「LOCAL」逃生

    \(\mathcal{Description}\)   有 \(n\) 个人掉进了深度为 \(h\) 的坑里,第 \(i\) 个人的肩高为 \(a_i\),臂长为 \(b_i\).设当前坑里人的集合为 ...