`
geeksun
  • 浏览: 968341 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

软件设计中的心跳机制

 
阅读更多
       前言
       在软件的设计架构中,心跳检测很重要,像在dubbo service、web api invoke中,需要consumer端感知provider端是否存活,不存活则切换调用另一个provider。
 
       一、什么是心跳检测
       判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。用于检测TCP的异常断开。
       基本原因是服务器端不能有效的判断客户端是否在线也就是说,服务器无法区分客户端是长时间在空闲,还是已经掉线的情况。所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。
       代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息。如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。
        发包方可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。
       一般来说,出于效率的考虑,是由客户端主动向服务器端发包,而不是相反。
 
       二、心跳机制的实现机制
网络中的接收和发送数据都是使用操作系统中的SOCKET进行实现。但是如果此套接字已经断开,那发送数据和接收数据的时候就一定会有问题。可是如何判断这个套接字是否还可以使用呢?这个就需要在系统中创建心跳机制。其实TCP中已经为我们实现了一个叫做心跳的机制。如果你设置了心跳,那TCP就会在一定的时间(比如你设置的是3秒钟)内发送你设置的次数的心跳(比如说2次),并且此信息不会影响你自己定义的协议。所谓“心跳”就是定时发送一个自定义的结构体(心跳包或心跳帧),让对方知道自己“在线”。 以确保链接的有效性。
所谓的心跳包就是客户端定时发送简单的信息给服务器端告诉它我还在而已。代码就是每隔几分钟发送一个固定信息给服务端,服务端收到后回复一个固定信息如果服务端几分钟内没有收到客户端信息则视客户端断开。比如有些通信软件长时间不使用,要想知道它的状态是在线还是离线就需要心跳包,定时发包收包。发包方:可以是客户也可以是服务端,看哪边实现方便合理。一般是客户端。服务器也可以定时轮询发心跳下去。心跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着。事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一个空包。
在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项。系统默认是设置的是2小时的心跳频率。但是它检查不到机器断电、网线拔出、防火墙这些断线。而且逻辑层处理断线可能也不是那么好处理。一般,如果只是用于保活还是可以的。心跳包一般来说都是在逻辑层发送空的包来实现的。下一个定时器,在一定时间间隔下发送一个空包给客户端,然后客户端反馈一个同样的空包回来,服务器如果在一定时间内收不到客户端发送过来的反馈包,那就只有认定说掉线了。只需要send或者recv一下,如果结果为零,则为掉线。 
但是,在长连接下,有可能很长一段时间都没有数据往来。理论上说,这个连接是一直保持连接的,但是实际情况中,如果中间节点出现什么故障是难以知道的。更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的连接给断掉。在这个时候,就需要我们的心跳包了,用于维持长连接,保活。在获知了断线之后,服务器逻辑可能需要做一些事情,比如断线后的数据清理呀,重新连接呀当然,这个自然是要由逻辑层根据需求去做了。
       总的来说,心跳包主要也就是用于长连接的保活和断线处理。一般的应用下,判定时间在30-40秒比较不错。如果实在要求高,那就在6-9秒。
 
       三、心跳检测的基本步骤:
       1. 客户端每隔一个时间间隔发生一个探测包给服务器。
       2. 客户端发包时启动一个超时定时器。
       3. 服务器端接收到检测包,应该回应一个包。
       4. 如果客户机收到服务器的应答包,则说明服务器正常,删除超时定时器。
       5. 如果客户端的超时定时器超时,依然没有收到应答包,则说明服务器挂了。
分享到:
评论

相关推荐

    软件看门狗设计

    1. 心跳机制:软件看门狗的核心是心跳检测,需要设定一个合理的周期,让程序在该周期内定期向看门狗发送心跳。心跳间隔不宜过短,以免对正常运行造成干扰;也不宜过长,以免错过异常恢复的机会。 2. 事件处理:利用...

    Linux环境下实现双机热备用的心跳设计

    在实际应用中,Linux环境下的双机热备用可以借助开源软件如Heartbeat、DRBD、Pacemaker等实现。例如,Heartbeat是一个流行的心跳解决方案,它可以监控网络连接、系统服务并管理资源转移。DRBD则提供块设备级别的数据...

    精品软件工具--tcp心跳检测工具库,由客户端库和服务端软件两部分组成。服务端通过心跳端口6969发送心跳请求包,客户.zip

    在本工具库中,服务端会在特定的心跳端口6969上监听,接收到心跳请求后,立即返回确认响应。端口6969是一个非标准端口,选择它是为了避免与其他常用服务冲突,确保心跳通信的顺利进行。服务端的响应速度直接影响到...

    通信软件中定时器库的设计与实现

    在通信软件中,定时器库用于确保数据能够在正确的时机被发送和接收,它在协议实现、数据包超时处理、心跳机制、轮询机制等多个方面都有重要作用。 为了设计一个高效的定时器库,开发者需要考虑到以下几个关键知识点...

    基于TCP协议的简单即时通信软件的设计与实现(含源文件).pdf

    文档详细描述了即时通信软件的客户端和服务器端的设计和实现要点,例如客户端主要涉及的功能模块和操作流程,以及服务器端主要负责的功能模块,如登录处理、消息转发、好友信息存储和心跳机制。客户端与服务器端之间...

    主备板协商和心跳

    在IT领域,主备板协商和心跳机制是网络管理和高可用性系统中的核心概念,确保系统的稳定运行和故障切换的无缝衔接。以下是关于这个主题的详细解释: **主备板协商**: 主备板协商是一种分布式系统中实现冗余和故障...

    网络容错机制的设计

    - **心跳机制**:周期性地向管理节点报告自身状态,确保节点间的通信正常。 4. **大规模集群的挑战**: - 在面对超过1000台机器的大型集群时,需要考虑如何高效地管理和调度资源。 - 老旧设备与新设备之间的兼容...

    VB设计的局域网聊天软件

    好友上线提醒功能则依赖于心跳机制,即客户端周期性地发送“心跳包”到服务器,以检查服务器上的在线状态更新,并在发现好友上线时向用户发送通知。 综上所述,【VB设计的局域网聊天软件】是一个集成了VB编程技术、...

    心跳监控软件

    标题中的“心跳监控软件”指的是一个能够实时监测和显示心跳数据的应用程序,通常用于健康管理和医疗辅助领域。这种软件能够接收来自下位机(可能是传感器设备)的数据,并将其转化为可视化的波形图,帮助用户或者医...

    测心跳软件源码_kaic.zip

    【标题解析】 ...开发者可以利用这些源码学习心跳检测机制,或者将其集成到自己的项目中,以提升设备监控和故障排查的效率。通过深入理解和修改源代码,可以定制化心跳检测功能,适应特定场景的需求。

    P2P聊天软件设计文档1

    综上所述,P2P聊天软件设计涵盖了用户身份验证、多用户聊天和P2P通信机制,以及关键的数据结构和组件,旨在提供稳定、高效的通信体验。设计中充分考虑了异步处理和分布式系统的特性,确保了软件的可扩展性和可靠性。

    c#tcp服务器+客户端(心跳).zip

    心跳机制是TCP通信中常用的一种策略,它用于检测网络连接是否仍然活跃,防止因网络问题导致的连接断开而未被察觉。 1. **TCP服务器**: - **监听与接受连接**:服务器创建一个Socket实例,绑定到特定IP和端口,...

    GAIYAOSHEJI.rar_QT聊天软件_qt 局域网聊天_概要设计

    在IT行业中,软件设计是开发流程中的关键步骤,其中概要设计是整个设计过程的重要环节。本文档将深入探讨使用QT框架开发的局域网聊天软件的概要设计,旨在为开发者提供清晰的指导和参考。 1. **QT框架介绍**: QT...

    变电站IED的GOOSE通信软件设计及实现

    7. **测试与验证**:软件设计完成后,需要通过严格的测试和验证确保其符合IEC61850标准,并能在实际环境中稳定运行。这包括一致性测试、功能测试和性能测试。 通过对变电站IED的GOOSE通信软件进行深入研究和设计,...

    简单聊天软件CS模式源代码设计资料

    - **实时通信模块**:确保消息的即时性,可能涉及心跳机制和长连接技术。 - **会话管理模块**:保存用户聊天记录,实现历史消息的查询。 - **错误处理与异常捕获**:确保程序在遇到问题时能够恢复或提供反馈。 3...

    局域网点对点通信软件设计与实现.pdf

    以下是关于该软件设计与实现的关键知识点: 1. **点对点通信**:点对点(P2P)通信是一种网络通信模型,其中每个参与者既是客户端也是服务器,直接与其他参与者交换数据,无需通过中央服务器。这种模式提高了效率,...

    心跳程序,能实现定时接收心跳和数据的功能。

    心跳程序就是设计来执行这种功能的软件,它定时发送和接收心跳,确保通信链路的稳定性和可靠性。 心跳程序的核心功能包括定时发送心跳和处理接收到的心跳。发送心跳通常是为了验证远程端点是否在线,而接收心跳则...

    SRUN3K PPPoE心跳助手

    总的来说,SRUN3K PPPoE心跳助手利用Qt库进行开发,通过转换学号并结合网络心跳机制,实现了对高校宿舍PPPoE网络的特殊账号处理和连接保持。用户需根据keepalive.ini配置心跳参数,并使用.exe文件启动服务,以确保...

Global site tag (gtag.js) - Google Analytics