当前位置: 技术问答>linux和unix
linux多线程 心跳机制怎么实现呢?
来源: 互联网 发布时间:2017-04-22
本文导语: TCP服务,长连接。 首先一个s(服务器)和一个c(客户端)建立TCP连接,S向C发送数据。C有两个线程:一个收数据;一个将数据保存到本地,保存成功以后向S回复一个确认。 因为是长连接,所以要加一个心跳检...
TCP服务,长连接。
首先一个s(服务器)和一个c(客户端)建立TCP连接,S向C发送数据。C有两个线程:一个收数据;一个将数据保存到本地,保存成功以后向S回复一个确认。
因为是长连接,所以要加一个心跳检测,C每隔100秒向S发一个心跳数据包,S收到包以后会给C一个回复。如果C没有在10秒内收到回复,则再次向S发心跳包,如果仍然没有在10秒内收到回复,则认为连接已经断了,则需要重新connect服务器。
基本功能实现了,现在缺少心跳检测功能。心跳怎么实现呢?听起来简单,实现起来发现不容易,各位大牛指点一下啊
|
在通信的循环里使用gettimeofday之类的函数获取时间
发送的时候记录一次时间,每次或每N次进循环体再获取时间,判断10s是不是过去了,如果过去了就判断有没收到确认包
发送的时候记录一次时间,每次或每N次进循环体再获取时间,判断10s是不是过去了,如果过去了就判断有没收到确认包
|
想法没错,问题是你所用的类似kernel里面的del_timer之类的函数,linux应用层没有。
我上面说的是应用层可用timer的一种方式
我上面说的是应用层可用timer的一种方式
|
嗯