我是靠谱客的博主 勤恳大侠,最近开发中收集的这篇文章主要介绍应用层心跳 OR TCP KEEPALIVE?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近搞网络这块,总结下心跳机制,一般都会在应用层做心跳,而避免使用TCP层的KEEPALIVE,主要因为存在以下缺陷:

1,KEEPALIVE的目的是探测连接是否存在,无法检测能不能发送数据,比如服务器由于负载过大到处无法响应请求,应用层的的原因导致数据无法传输,但是连接还是正常的,试问对应用程序来说,是否该判断该连接正常么?

2,如果TCP连接的一端断网或者断电,对端的应用层并不知晓,继续发送数据,这个数据包的优先级是高于KEEPALIVE的数据包,因此这个KEEPALIVE包是无法发送出去的,只有在长时间的重传失败后,我们才能判断连接断开,这段长时间,应用及其容易产生业务逻辑BUG。

3,KEEPALIVE的数据包如果碰到四层负载均衡的中继设备,它会被中继设备接收并不会传到对端,造成无法准确判断连接是否存活。

4,如果软件通过互联网而非局域网,那有些运营商会过滤掉KEEPALIVE数据包,这种问题要是出现,绝对让你欲哭无泪。

总体还说,各位还是在应用层实现心跳机制,默借助于TCP的KEEPALIVE,除非你确定不用关心上述的四个问题。

最后

以上就是勤恳大侠为你收集整理的应用层心跳 OR TCP KEEPALIVE?的全部内容,希望文章能够帮你解决应用层心跳 OR TCP KEEPALIVE?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部