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. 解决matplotlib中文不显示问题

    在导入库时添加如下几行代码 from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体 mpl.rcPa ...

  2. 一步一步搭建基于ffmpeg和sdl2的流媒体播放器

    一.  背景: 一步一步从资料收集.技术选型.代码编写.性能优化,动手搭建一款支持rtsp.rtmp等常用流媒体格式的视频播放器,ffmpeg用于流媒体解码,sdl2用于视频画面渲染和声音播放. 二. ...

  3. spring学习三:Spring Bean 生命周期

    Bean 的生命周期 理解 Spring bean 的生命周期很容易.当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.同样,当 bean 不再需要,并且从容器中移除时,可能需 ...

  4. uniap tab list 滑动

    效果如下 <uni-popup ref="bankListAll" type="dialog"> <ty-mutiple-select :mu ...

  5. LaunchScreen原理

    会自动加载LaunchScreen是因为在Target当中,指定了Launch Screen file 它的底层实现其实把LaunchScreen上的东西,生成了一张图片,然后把这张图片设为程序的启动 ...

  6. kebernet--新手填坑

    1.安装好kubernet之后,新建rc后,里面的容器一直ImagePullBackOff ,镜像无法拉取: ----需要配置docker镜像为国内镜像,记得在各个Node上都要配置!!! vim / ...

  7. python进阶(24)Python字典的底层原理以及字典效率

    前言 问题1:python中的字典到底是有序还是无序 问题2:python中字典的效率如何 python字典底层原理   在Python 3.5以前,字典是不能保证顺序的,键值对A先插入字典,键值对B ...

  8. 一站式超全JavaScript数组方法大全

    一站式JavaScript数组方法大全(建议收藏) 方法一览表 详细操作 本人总结了JavaScript中有关数组的几乎所有方法(包含ES6之后新增的),并逐一用代码进行演示使用,希望可以帮助大家! ...

  9. 虫师Selenium2+Python_12、BDD框架之Lettuce入门

    http://www.cnblogs.com/fnng/p/3415609.html P293--简介: TDD(Test-Drivern-Development)测试驱动开发 ATDD(Accept ...

  10. Solution -「BJWC 2018」「洛谷 P4486」Kakuro

    \(\mathcal{Description}\)   Link.   有一个 \(n\times m\) 的网格图,其中某些格子被主对角线划成两个三角形,称这样的格子为特殊格:初始时,除了一些障碍格 ...