您现在的位置是:首页 >技术交流 >Linux 网络编程——心跳机制(心跳包)网站首页技术交流

Linux 网络编程——心跳机制(心跳包)

Is Fang 2024-10-08 12:01:04
简介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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。