TCP Keepalive机制与应用层心跳Heartbeat

TCP长连接中可能出现的问题

1.     很多防火墙路由器等对于空闲socket自动关闭

2.     对于非正常断开, 服务器并不能检测到. 为了回收资源, 必须提供一种检测机制.

于是,就有了心跳(HeartBeat)机制。


心跳机制的两种实现方案

目前而言,有两种方式实现TCP的保活(业内现状是IM方面几乎都采用第一种)

1.     应用层协议自己实现的心跳机制

很多应用层协议都有HeartBeat机制,由应用自己实现的应用层的心跳, 为心跳消息额外定义一个消息类型。通常是客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线,并传输一些可能必要的数据。使用心跳包的典型协议是IM,比如QQ/MSN/飞信等协议。

2.     TCP协议支持的心跳机制Keepalive

打开TCP协议已有的SO_KEEPALIVE选项. 一般实现在服务器侧,客户端被动响应前面一篇博客有具体介绍,这里就不多讲了。

 

TCP Keepalive和应用层HeartBeat优缺点

1.     TCP协议的Keepalive

优点:

系统内核完全替上层应用自动给做好了,内核层面计时器相比上层应用,更为高效

上层应用只需要处理数据收发、连接异常通知即可。

使用起来简单, 减少了应用层代码的复杂度. 也会更节省流量, 因为应用层的数据传输到TCP协议层时都会被加上额外的包头包尾. 由TCP协议提供的检活, 其发的探测包, 理论上实现的会更精妙, 耗费更少的流量.。

缺点:

第一点,keepAlive只能检测连接存活,而不能检测连接可用,比如某台服务器因为某些原因导致负载超高,CPU满了,无法响应任何业务请求,但是使用 TC

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值