美文网首页
心跳相关

心跳相关

作者: 7d972d5e05e8 | 来源:发表于2020-03-29 13:14 被阅读0次

    一、TCP中已有SO_KEEPALIVE选项,为什么还要在应用层加入心跳包机制?

    参考文章:https://blog.csdn.net/gettogetto/article/details/76736371?utm_source=blogxgwz9

    其中有两点说的很好:
    因为TCP协议中的SO_KEEPALIVE有几个致命的缺陷:

    1. keepalive只能检测连接是否存活,不能检测连接是否可用。比如服务器因为负载过高导致无法响应请求但是连接仍然存在,此时keepalive无法判断连接是否可用。
    2. 如果TCP连接中的另一方因为停电突然断网,我们并不知道连接断开,此时发送数据失败会进行重传,由于重传包的优先级要高于keepalive的数据包,因此keepalive的数据包无法发送出去。只有在长时间的重传失败之后我们才能判断此连接断开了。

    我的理解:tcp的keepalive是传输层上的心跳检测,心跳在操作系统层面就返回了,数据包不会到达应用层,更不会由应用层处理了。对于这种包,应用层无法感知到,更谈何检测应用程序的心跳呢!所以,应用层的心跳必须要在应用层来设计,你既然要关心应用是否还在存活,就只能让心跳包达到该应用。举例:同一个物理机上有多个不同的应用跑着,你需要关注每个应用的存活,就必须对每个应用设计相应的心跳包。心跳包怎么设计,数据结构是什么样子的,每个应用可以各不相同,取决于你的心跳包协议,约定好了就OK。

    相关文章

      网友评论

          本文标题:心跳相关

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