您现在的位置是:首页 >技术交流 >Linux 网络编程——心跳机制(心跳包)网站首页技术交流
Linux 网络编程——心跳机制(心跳包)
简介Linux 网络编程——心跳机制(心跳包)
心跳信号有点类似于看门狗,心跳信号提供看门狗计时器消耗的数据 ,以便决定是否执行其操作。
心跳机制
- 心跳机制的原理很简单:客户端每隔N秒向服务端发送一个心跳消息,服务端收到心跳消息后,回复同样的心跳消息给客户端。如果服务端或客户端在M秒(M>N)内都没有收到包括心跳消息在内的任何消息,即心跳超时,我们就认为目标TCP连接已经断开了。
心跳的作用
-
通知服务器,客户端存活状态,一旦服务器监测到在某段时间没有收到客户端发来的心跳包,服务器就会释放曾经为此客户端分配的所有资源,例如Socket连接
-
定时的刷新NAT内
外网IP映射表
,以便防止NAT路由器移除映射表,导致客户端和服务器端的连接中断户体验。
心跳的实现方案
方案一:服务器主动发送心跳包
- 缺点是对服务器端性能要求较高。
方案二:客服端主动发送心跳包
心跳包的发送的两种技术:
1、应用层自已实现的心跳包:
- 由应用程序自己发送心跳包来检测连接是否正常,服务器每隔一定时间向客户端发送一个短小的数据包,然后启动一个线程,在线程中不断检测客户端的回应, 如果在一定时间内没有收到客户端的回应,即认为客户端已经掉线;同样,如果客户端在一定时间内没有收到服务器的心跳包,则认为连接不可用
2、使用SO_KEEPALIVE套接字选项:
- 在TCP的机制里面,本身是存在有心跳包的机制的,也就是TCP的选项。不论是服务端还是客户端,一方开启KeepAlive功能后,就会自动在规定时间内向对方发送心跳包, 而另一方在收到心跳包后就会自动回复,以告诉对方我仍然在线,但是这种基于TCP Keep-alive一般都适用于服务器端
如何使用参考博文:
https://blog.csdn.net/youniworld/article/details/47300019
https://blog.csdn.net/weixin_47321452/article/details/121633227
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。