• 【网络技术】心跳机制(入门讲解)


    请添加图片描述


    👉博__主👈:米码收割机
    👉技__能👈:C++/Python语言
    👉公众号👈:测试开发自动化【获取源码+商业合作】
    👉荣__誉👈:阿里云博客专家博主、51CTO技术博主
    👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。


    心跳机制



    1. 原理

    客户端每隔N秒向服务端发送一个心跳消息,服务端收到心跳消息后,回复同样的心跳消息给客户端。如果服务端或客户端在M秒(M>N)内都没有收到包括心跳消息在内的任何消息,即心跳超时,就认为目标TCP连接已经断开。


    2. 作用

    通知服务器,客户端存活状态,一旦服务器监测到在某段时间没有收到客户端发来的心跳包,服务器就会释放曾经为此客户端分配的所有资源,例如Socket连接


    3. 实现方案

    3.1 方案一:服务器主动发送心跳包

    服务器建立定时器,定时发送心跳包给到客户端,客户端收到心跳包后,立即发送心跳包给到服务器,服务器收到客户端发来的心跳包后确认客户端的连接可用,不执行释放socket相关的操作。
    如果服务器端没规定的时间间隔内没有收到客户端响应的心跳包,服务器端就认为客户端的连接不可用,执行释放socket相关的操作。

    优势:对于那些需要管理和监控大量客户端连接的服务器来说,服务器可以更加主动地控制和释放不活跃的连接,及时回收资源。
    劣势:当客户端数量非常大时,服务器可能需要频繁地发送大量心跳包,这可能会导致不必要的网络和服务器负载。对服务器的要求比较高。

    3.2 方案二:客服端主动发送心跳包

    客户端定时主动的发送心跳包给到服务器端,服务器端收到心跳包后对相关的socket进行加标识,然后服务器端发送响应心跳包给到客户端。客户端收到心跳包认为连接可用。
    如果服务器端超过一段时间没有收到心跳包,相关的socket的标识符回进行降权,直至失效,然后服务器端会释放这个socket相关的资源。这个对服务器的性能要求不那么高。

    优势:服务器不需要主动检查每一个连接的状态,而是由客户端主动报告其状态,这样可以减轻服务器的负担。
    劣势:客户端需要实现心跳逻辑,并确保在连接期间定期发送心跳。对于电池供电的移动设备来说,频繁的心跳可能会消耗更多的电量。

  • 相关阅读:
    LLM 为什么需要 tokenizer?
    测试/开发程序员停滞不前,倦怠怎么办?突破各种失败和挫折......
    高频:spring知识
    2M大小windows11 改 windows10
    官宣出自己的博客啦
    网络协议:包丢失&物理层&数据链路层
    利用dockerfile升级flink的curl
    RuoYi若依管理系统最新版 基于SpringBoot的权限管理系统
    [COCI2013-2014#5] LOZINKA
    APISIX、APISIX Dashboard搭建及插件使用
  • 原文地址:https://blog.csdn.net/weixin_44244190/article/details/132811672