Websocket实现心跳

websocket心跳的实现(包括全部代码) 本文主要讲的是如果设计websocket心跳已经需要考虑哪些问题。前言在使用websocket的过程中,有时候会遇到客户端网络关闭的情况,而这时候在服务端并没有触发onclose事件。这样会: 多余的连接 服务端会继续给客户端发数据,这些数据会丢失 所以就需要一种机制来检测客户端和服务端是否处于正常连接的状态。这就是websocket心跳,这个名字非常生动形象,还有心跳说明还活着(保持正常连接),没 阅读详情

Angular的实现,分成service部分,以及调用该service的component。

service代码 websocket.service.ts

import {Injectable} from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class WebSocketService {

  constructor() {
  }

  createWebSocket(url: string, ws, reconnectLock, messageHandler) {
    if (url.startsWith("/")) {
      if (window.location.protocol === "https:") {
        url = "wss://" + window.location.host + url;
      } else {
        url = "ws://" + window.location.host + url;
      }
    }

    ws = new WebSocket(url);
    this.initWebSocket(url, ws, reconnectLock, messageHandler);
  }

  private initWebSocket(url, ws, reconnectLock, messageHandler) {
    ws.onopen = (event) => {
      console.log("WebSocket onopent");
      ws.send("Heart beat message.");
      this.heartBeatCheck.start(ws);
    }

    ws.onmessage = (event) => {
      console.log("WebSocket onmessage");
      messageHandler.onMessage(event);
      this.heartBeatCheck.start(ws);
    }

    ws.onclose = (event) => {
      console.log("WebSocket onclose");
      this.reconnect(url, ws, reconnectLock, messageHandler);
    }

    ws.onerror = (event) => {
      console.log("WebSocket onerror");
      this.reconnect(url, ws, reconnectLock, messageHandler);
    }
  }

  private reconnect(url, ws, reconnectLock, messageHandler) {
    if (reconnectLock.lock) {
      return;
    }

    reconnectLock.lock = true;

    let self = this;
    setTimeout(function () {
      self.createWebSocket(url, ws, reconnectLock, messageHandler);
      reconnectLock.lock = false;
    }, 30000);
  }

  private heartBeatCheck = {
    heartBeatTimeout: 30000,
    heartBeatObj: null,
    serverResponseTimeout: 10000,
    serverResponseObj: null,
    start: function (ws) {
      let self = this;
      self.heartBeatObj && clearTimeout(self.heartBeatObj);
      self.serverResponseObj && clearTimeout(self.serverResponseObj);

      self.heartBeatObj = setTimeout(function () {
        ws.send("Heart beat message.");

        self.serverResponseObj = setTimeout(function () {
          ws.close();
        }, self.serverResponseTimeout);
      }, self.heartBeatTimeout);
    }
  }
}

conponent代码 dashboard.component.ts

import {Component, OnInit} from '@angular/core';

import {MonitorService} from "../../services/monitor.service";
import {AppEditType} from "../app-edit/app-edit-type";
import {WebSocketService} from "../../services/websocket.service";
import {environment} from "../../../environments/environment";
import {MonitoredApplication} from "../../entities/monitored-application";

@Component({
  selector: 'app-dashboard',
  templateUrl: './dashboard.component.html',
  styleUrls: ['./dashboard.component.css']
})
export class DashboardComponent implements OnInit {

  appEditTypes = AppEditType;
  wsUrl = environment.wsUrl;
  webSocket = null;
  reconnectLock = {lock: false};

  constructor(private monitorService: MonitorService,
              private webSocketService: WebSocketService) {
  }

  ngOnInit() {
    this.webSocketService.createWebSocket(this.wsUrl, this.webSocket, this.reconnectLock, this.messageHandler);
  }

  private messageHandler = {
    context: {
      service: this.monitorService
    },
    onMessage : function(event){
      if (event.data == "HeartBeatOK") return;

      let apps = JSON.parse(event.data) as Array<MonitoredApplication>;
      this.context.service.refreshAllApplications(apps);
    }
  }
}

实现websocket心跳检测,断线重连机制 WebSocket是一种革命性的,构建在TCP之上,旨在简化客户端与服务器之间的数据交换过程。通过单次握手建立持久连接,WebSocket实现了真正的双向实时通信,显著提高了交互效率。这一特性使其成为开发实时应用的理想选择,特别适用于等场景。相较于传统HTTP轮询方式,WebSocket不仅降低了网络带宽消耗,还大幅提升了数据传输速度和实时性,为现代Web应用提供了更加高效可靠的通信解决方案。WebSocket连接的生命周期包括三个关键阶段:建立、数据传输和关闭。 阅读详情

相关推荐

webSocket前端开发实现+心跳检测机制

最近项目用到了webSocket实时通信机制,将过程中遇到的麻烦和坑做一下记录 首先,了解一下webSocket是什么?它是一种网络通信协议,是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。 为什么要使用webSocket以及心跳检测机制 网上当然后很多讲解,这是本人的一个简单理解: 一般情况下前后端通信会采用HTTP网络协议,它是一种无状态的、无连接的、单向的应用层协议,采用请...

mayuan2011的博客 1万+

Websocket心跳检测、重连机制

为了获取实时数据,前端需要和后端保持通信,HTTP 协议只能是客户端向服务器发出请求,服务器返回查询结果。这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。一般通过以下几种方式实现即时通讯。 即时通讯:短轮询、长链接、长轮询、websocket 短轮询的原理很简单,每隔一段时间客户端就发出一个请求,去获取服务器最新的数据, 一定程度上模拟实现了即时通讯。 优点:兼容性强,实现非常简单 缺点:延

lhz_19的博客 1万+

websocket心跳链接代码_websocket心跳的实现(包括全部代码)

本文主要讲的是如果设计websocket心跳已经需要考虑哪些问题。前言在使用websocket的过程中,有时候会遇到客户端网络关闭的情况,而这时候在服务端并没有触发onclose事件。这样会:多余的连接服务端会继续给客户端发数据,这些数据会丢失所以就需要一种机制来检测客户端和服务端是否处于正常连接的状态。这就是websocket心跳,这个名字非常生动形象,还有心跳说明还活着(保持正常连接),没有心...

weixin_28681719的博客 926

原生websocket封装(心跳检测、自动重连)

较全面的原生websocket封装

烈阳, 1394

Flink CDC 实战:5分钟搞定PostgreSQL数据实时同步(附避坑指南)

本文详细介绍了如何使用Flink CDC实现PostgreSQL数据的实时同步,包括环境配置、逻辑复制槽创建、Flink环境搭建及实战验证。通过5分钟快速指南,帮助开发者高效搭建实时数据管道,并提供了常见问题排查和生产环境优化建议。

red88的博客 819

手把手教你用运放搭建方波三角波发生器(附Multisim仿真文件)

本文详细解析了使用运算放大器搭建方波和三角波发生器的核心原理与设计步骤。通过剖析迟滞比较器与积分器的联动机制,指导读者进行电路设计、元件选型,并借助Multisim仿真进行参数调优与波形优化。文章提供了从理论分析、虚拟仿真到实物焊接调试的完整实践指南,并附有仿真文件,帮助硬件爱好者与初学者深入掌握这一经典模拟电路设计。

weixin_29165725的博客 639

websocket心跳检测

1.心跳检测的缘由 websocket心跳检测的目的用一句话概括就是客户端和服务端保证彼此还活着,避免丢包发生. websocket断开一般有两种情况 前端断开       在使用websocket过程中,可能会出现网络断开的情况,比如信号不好,或者网络临时关闭,这时候websocket的连接已经断开,而不同浏览器有不同的机制,触发onc...

huanggang0101的博客 3617

《QMT量化实战系列》支持自定义筛选与排序的多因子策略,实测年化收益超100% (1)

公众号推出《QMT量化实战》系列,通过多维度、多策略、多场景讲解QMT量化平台应用,每期附代码解读。本期复现《支持自定义筛选与排序的多因子策略》,策略包含三大核心模块:1. 通过Tushare获取30+财务因子数据;2. 提供灵活筛选机制(支持排除ST股、次新股及特定板块);3. 创新性多因子加权排序系统(支持自定义因子权重组合)。交易逻辑包含动态调仓机制,当持仓标的排名低于阈值时触发卖出。该策略具有高度可配置性,适合不同风险偏好的投资者。(149字)

qq_46262068的博客 1732

WebSocket在服务端和客户端通信demo,支持心跳检测+断线重连

一、为什么需要 WebSocket?初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处?答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。这种单向请求的特点,注定了如果服务器有连续...

zsnpromsie的博客 2万+

重带电粒子的能量歧离(energy straggling)

能量歧离,Bethe-Bloch

G751888629的博客 2298

保姆级教程:用PyTorch从零实现SDE扩散模型(附完整代码与MNIST实战)

本文提供了一份详细的PyTorch教程,指导读者从零开始实现SDE扩散模型,并附有完整的代码示例和MNIST数据集实战。通过解释随机微分方程(SDE)的核心概念、模型架构设计、训练流程实现以及采样生成过程,帮助开发者掌握扩散模型的构建与应用。

weixin_28677005的博客 266

Vue 连接使用WebSocket,WebSocket心跳检测

WebSocket 是独立的、创建在 TCP 上的协议。Websocket 通过HTTP/1.1 协议的101状态码进行握手。为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

铭的博客 1417

【yolo】如何在 YOLOv8 中添加负样本以减少误检

在YOLOv8目标检测中,误检(False Positive)是一个常见问题,即模型将非目标区域错误识别为目标。通过引入负样本(Negative Samples),即不包含任何目标框的图像,可以有效减少误检。在YOLOv8中添加负样本的方法是为这些图像提供空的标注文件(.txt),确保每张图像都有对应的标注文件,即使内容为空。可以使用Python脚本自动生成这些空标注文件。使用负样本时需注意数量比例、标注一致性、验证集同步和图像质量。适当加入负样本能显著提升模型鲁棒性,降低误判风险。

songhuangong123的博客 2879

Socket.io 实现 WebSocket 的心跳机制

现代的 Web 应用越来越复杂,往往需要实时通信来保持用户体验。WebSocket 技术是一种实现实时通信的标准,但是它存在连接断开、网络延迟等问题,这就需要一个称之为“心跳机制”的解决方案,以保持 WebSocket 的稳定通信。本篇文章将介绍 Socket.io 实现 WebSocket 心跳机制的方法。本篇文章介绍了 Socket.io 实现 WebSocket 心跳机制的方法,并提供了相应的示例代码和详细的解释。同时,我们也了解了心跳机制的作用和实现的原理。

2401_84695014的博客 2201

AI游戏制作07——波次计时器,敌人按波次生成

AI游戏制作07——波次计时器,敌人按波次生成

qq_40572023的博客 47

【2026年华为秋招(AI)-2月4日-第一题(100分)- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

本文摘要:本文包含20道选择题,涵盖机器学习、线性代数、Transformer架构、概率统计等多个领域。题目涉及正交矩阵性质、Transformer注意力机制、聚类距离度量、ReAct框架、Softmax函数、混淆矩阵计算、Flash-Attention优化、位置编码、期望计算、归一化方法、矩阵迭代法、矩阵秩、大模型架构、神经网络推理、泊松流性质、SVM核函数以及聚类算法等知识点。每道题均提供解析,帮助理解核心概念和解题思路。

m0_73659489的博客 125

websocket实现心跳连接

在使用websocket的时候,遇到了一个websocket在连接一段时间就异常断开连接了。第一想法就是重新去连接websocket(websock.onopen),后来发现这种方式是错误的,查阅文档发现,要想重新建立连接,就需要一种心跳思想去处理(实时监听连接情况,断了就去重连)下面以Vue代码为准: let lockReconnect = false;//避免重复连接 let w...

weixin_30896825的博客 3248

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

java websocket心跳包_web socket 心跳包的实现方案

web socket 心跳包的实现方案05/30/2010现在网络环境错综复杂,socket心跳包是获得健康强壮的连接的有效解决方案,今天,我们就在web socket中实现心跳包方案,是的,尽管我们只是做一个简单的聊天室,但我们让他稳定可靠一些一点也没有错。我的心跳包方案很是简单,原理就是间隔发送心跳包数据给服务器,服务器在一定时间内发回心跳包响应,对比超时限定,如果超过设定的超时时间,则认为当...

weixin_29505425的博客 2511

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

websocket以及心跳机制的实现

在不包含头部的情况下,服务端到客户端的包头只有2~10字节(取决于数据包长度),客户端到服务端的的话,需要加上额外的4字节的掩码。Long poll(长轮询):其中采用的是阻塞性的方案,客户端向服务器发起ajax请求,服务器挂起该请求不返回数据直接有新的数据,客户端接收到数据之后再次执行long poll;可以看到,基于 HTTP 协议的方案都包含一个本质缺陷 —— 「被动性」,服务端无法下推消息,仅能由客户端发起请求不断询问是否有新的消息,同时对于客户端与服务端都存在性能消耗。

2201_75475459的博客 1918

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

初探和实现websocket心跳重连

心跳重连缘由 在使用websocket过程中,可能会出现网络断开的情况,比如信不好,或者网络临时性关闭,这时候websocket的连接已经断开, 而浏览器不会执行websocket 的 onclose方法,我们无法知道是否断开连接,也就无法进行重连操作。 如果当前发送websocket数据到后端,一旦请求超时,onclose便会执行,这时候便可进行绑定好的重连操作。 因此websocket

投资项目 4487

okhttp的WebSocket心跳实现原理

okhttp的WebSocket心跳实现原理

yzpbright的博客 2280

【基于 Spring Boot 的 WebSocket 心跳监测和自动重连机制实现详解】

● WebSocket 最初由 RFC 6455 标准化,运行于 TCP 之上。● 客户端发起一次 HTTP/1.1 升级(Upgrade)请求,服务器同意后,协议从 HTTP 切换到 WebSocket。● 双方在握手完成后可互发“帧”(Frame),常见的有 Text、Binary、Ping、Pong、Close 等类型。@Override@Override//收到 ping 返回 pongreturn;// 收到 text 返回 text@Override。

2401_83141884的博客 2641

client心跳 websocket_websocket实现心跳连接

在使用websocket的时候,遇到了一个websocket在连接一段时间就异常断开连接了。第一想法就是重新去连接websocket(websock.onopen),后来发现这种方式是错误的,查阅文档发现,要想重新建立连接,就需要一种心跳思想去处理(实时监听连接情况,断了就去重连)下面以Vue代码为准:let lockReconnect = false;//避免重复连接let wsUrl = '‘...

weixin_42358539的博客 865

使用Websocket实现消息推送(心跳)

0x00 心跳 本来以为写完了,结果最近和一个同事在讨论心跳的事情,这里再做一个补充。先说我的结论: WebSocket协议已经设计了心跳,这个功能可以到达检测链接是否可用 心跳是用来检测链接是否可用的,不一定支持携带数据,可要看具体实现 如果非要心跳中带上复杂数据,那这个可作为应用层的一个功能自己去实现。 心跳逻辑 0x01 WebSocket协议的控制帧 上一篇的最后简单提到了心跳,下面是对websocket协议控制帧的描述: 5.5. Control Frames ...

qq_25330791的博客 1831

基于websocket实现心跳保持和断开重连

/ 确保触发onclose。// 处理二进制图像数据。// 页面卸载时清理资源。// 重连间隔(ms)// 心跳间隔(ms)// 重置重连计数器。

xuweilin的博客 773

封装websocket,实现心跳检测和自动重连

console.log('心跳消息', data.msg );HEART_BEAT:'heart_beat',//心跳检测消息。console.log('普通消息');console.log('心跳无响应 ,已经断线了');console.log('连接发生了错误',e);console.log('连接已关闭');reconnect:10 * 1000,//断线重连时间。console.log('断开了连接',e);console.log( '开启' );MSG:'message',//普通消息。

gdut666的博客 714
上一篇: Gradle笔记
AlainGogogo
博客等级 码龄18年 5粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值