美文网首页Linux网络开发
谈谈长连接和心跳保活机制

谈谈长连接和心跳保活机制

作者: 勇敢地追 | 来源:发表于2019-09-28 16:30 被阅读0次

    1.长连接介绍

    通信双方进行TCP链接后进行通信,结束后不主动关闭链接
    优点:通信速度快,免去了DNS解析时间,以及三次握手四次分手的时间,避免短时间内重复连接所造成的信道资源 & 网络资源的浪费

    2.长连接断开的原因

    • 长连接所在进程被杀死
    • NAT超时
    • 网络状态发生变化,如移动网络 & Wifi切换、断开、重连
    • 其他不可抗因素(网络状态差、DHCP的租期等等 )
    NAT简介
    IP可以分为公网ip和私网IP,公司,学校,政府机构等场所一般都是私网IP,所有的私网IP通过公网ip连接互联网。只有公网ip是能够连接互联网的,私网IP一般只用作局域网
    那么怎么连上网的呢,我们通过私网ip然后把我们的需求和要发送的数据发给路由器,然后路由器对接网络,再把数据发送给Internet.然后internet发送数据到我们学校的路由,然后路由在通过我的私网ip发送给我,这就是我们真实上网的流程。私网Ip和公网Ip的转换这个问题,其实利用到了nat转换技术
    NAT对我们来说最大的贡献就是帮助我们节省了大量的ip资源
    但是也有缺陷,NAT最大的弊端在于破坏了IP端到端通信的能力。因为一个会话建立后会在NAT设备上建立一个网管映射表,在会话静默的这段时间,NAT网关会进行老化操作。
    

    3.高效维持长连接方案

    • 进程保活(防止进程被杀死)
    • 心跳保活(阻止NAT老化)
    • 断线重连(断网以后重新连接网络)
    3.1 进程保活
    进程保活.jpg
    3.2 心跳保活

    第4节会说明

    3.3 断线重连

    需要检测网络状态&监听网络变化,可以考虑BroadcastReceiver

    4.心跳保活

    4.1 定义

    每隔一段时间想对方发送自定义信息(心跳包),以确保连接存活且有效的通信机制
    注意,它和和轮询机制区别:一次轮询相当于一次TCP连接和断开

    4.2 心跳机制的方案和设计
    心跳流程.jpg
    4.3 设计要点
    • 心跳包的规格(内容 & 大小)
    • 心跳发送的间隔时间
    • 断线重连机制
    4.3 (1)心跳包的规格

    心跳包 = 1个携带少量信息 & 大小在10字节内的信息包

    4.3 (2)心跳发送的间隔时间

    不能过长,NAT超时也没检测出来。不能过短,资源浪费和信令风暴

    信令风暴:
    由于网络收到的终端信令请求超过了网络各项信令资源的处理能力,引发网络拥塞以至于产生雪崩效应,导致网络不可用,我们称之为“信令风暴”。
    

    最常用方案是每隔x分钟发送心跳包1次,缺陷在于网络环境不同未必都适用。所以采用自适应心跳间隔


    自适应心跳间隔时间.jpg

    该方案需要解决的有2个核心问题

    • (1)如何自适应计算心跳间隔 从而使得心跳间隔 接近 当前NAT 超时时间
      不断增加心跳间隔时间进行心跳应答测试,直到心跳失败5次后,即可找出最接近 当前NAT 超时时间的心跳间隔时间
    • (2)如何检测 当前网络环境的NAT 超时时间 发生了变化
      当前发送心跳包成功 的最大间隔时间(即最接近NAT超时时间的心跳间隔) 发送失败5次后
    4.3 (3)断线重连机制

    判断长连接是否有效的准则 = 服务器是否返回心跳应答
    此处需要分清:长连接存活 & 有效状态的区别:
    存活:长连接的网络链路存在,但是数据不一定能响应
    有效:存活且能响应数据
    基本思路:若连续5次发送心跳后,服务器都无心跳应答,则视为长连接无效

    参考:https://blog.csdn.net/carson_ho/article/details/79522975

    相关文章

      网友评论

        本文标题:谈谈长连接和心跳保活机制

        本文链接:https://www.haomeiwen.com/subject/ryrxyctx.html