当前位置: 首页 > news >正文

猜测心跳包机制的核心逻辑

一、心跳包的作用

定时发送一个数据包,等待对方回复。

如果对方在规定时间内回复,说明连接正常;否则出现异常或者收不到回复,说明工作不正常。

二、主要逻辑

(一)定义心跳包的格式

1、发送

1字节类型(值为10)

2字节标识码(值为0xAABB)

2、回复

1字节类型(值为1)

2字节代号(默认为0xFF)

(二)定时发送心跳包

// 记录超时次数

int k = 0;

try{

oo:

while(true){

k = 0;

// 输出心跳包给对方

out.write(Util.getHeart());

// 在3次超时内读取

while(k < 3){

try{

// 设置超时时间为2秒

sock.setSoTimeout(2000);

// 读取回复

Data d = in.read();

// 如果是正确回复,跳出

if(ok(d)){

break;

} else {

// 跳出外层循环

break oo;

}

} catch(SocketException e){

// 超时,次数加一

k++;

}

}

// 如果等于3次,跳出循环

if(k == 3){

break;

}

// 休眠10秒

Thread.sleep(10000);

}

} catch(SocketException e){

}

// 打印提醒连接中断

System.out.print("失去连接");

// 其他处理,移除服务,通知运维

(三)收到心跳包,回复

while(true){

// 读取一个数据包

Data d = in.get();

// 如果类型是10,说明为心跳包

if(d.type() == 10){

// 对心跳包回复

out.write(1);

out.write(00);

out.write(0xFF);

out.flush();

}

}

三、其他情况

1、如果只是监听状态的TCP连接中断,而服务进程还在正常运行,那么此时把服务移除会错误处理。

2、解决思路

再次重连测试,只有超过1次重连后,依然无法连接,就说明服务器出现死机,可以通知运维处理或者从服务列表里移除。

http://www.jsqmd.com/news/156841/

相关文章:

  • 提升查询速度:Elasticsearch堆外内存调优操作指南
  • BashOperator 中 bash_command 以 .sh 结尾会被误判为模板文件的问题分析
  • Times New Roman字体可用在商标注册不!
  • PyTorch-CUDA-v2.6镜像运行DreamBooth个性化图像生成
  • 设计异步监听TCP客户端重连的逻辑
  • PyTorch-CUDA-v2.6镜像运行Diffusion Model图像去噪过程解析
  • IPv4 和 IPv6 的区别
  • 卖农产品小米侵权?“小米”牌小米商标已被注销!
  • PyTorch-CUDA-v2.6镜像运行CLIP多模态模型图文检索应用
  • AI系统在处理稀疏奖励环境时的探索策略
  • 【Hot100-Java简单】:两数之和 (Two Sum) —— 从暴力枚举到哈希表的思维跃迁
  • 2025年大模型六大突破,从小白到专家必看,2025大模型年度回顾
  • 基于STM32的智能空气质量检测系统
  • Effective C++学习笔记
  • 【Hot100-Java中等】:字母异位词分组
  • 推荐阅读:现代Python爬虫技术的演进与实战技巧
  • 2025年AI技术革命:从训练范式到应用的全面解析 | 程序员必看收藏指南
  • 爬虫到底难在哪里?
  • AWS Server certificate ARN is required 如何解决
  • Agisoft Metashape Pro(3D摄影建模软件)
  • 为什么 NAT Gateway 一定在 Public Subnet?
  • CH340转USB-Serial Controller D常见识别问题解析
  • 推荐阅读:Python在数据分析中的价值与实践路径
  • PyTorch-CUDA-v2.6镜像支持PPO强化学习算法吗?RLHF基础环境搭建
  • Day 52 神经网络调参指南
  • 一文说清8个基本门电路图:初学者通俗解释
  • SpringBoot+Vue 社区物资交易互助平台平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • 推荐阅读:Python版本选择:在PyChatm与Python 3.13之间寻找最佳实践
  • PyTorch-CUDA-v2.6镜像中实现梯度裁剪防止训练爆炸
  • 前后端分离社区医疗服务可视化系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程