完整的应用心跳服务应该包含哪些方面( 三 )

完整的应用心跳服务应该包含哪些方面

执行服务程序并重定向到日志文件server.log,执行客户程序,之后将网络连接断开一段时间后(大于KeepAlive空闲时间+重复探测时间),重新打开网络连接,用ssh登录服务器,查看server.log文件.发现打印了ETIMEDOUT,验证了在客户网络断开后,到达空闲时间时,服务器由于开启了KeepAlive选项,会向客户端发送探测包,几次还没收到客户端的回应,那么select将返回套接字可读的条件,并且read返回-1.设置相关错误,
完整的应用心跳服务应该包含哪些方面


完整的应用心跳服务应该包含哪些方面


完整的应用心跳服务应该包含哪些方面

而与之相反的情况是如果不开启KeelAlive选项,那么即使客户端网络断开超过了整个的空闲和探测时间,服务端的select也不会返回可读的条件,即应用程序无法得到通知。
-----------
其次,网络组件中Connect方需要实现自动重连机制,当断线命令来到时可以自动重新建立连接,同时,这样也可以避免client端和server端的启动顺序问题,client端可以无限重连重试server的链接

■网友
貌似你给出的答案偏向TCP层?
如果是应用层的话,直观上服务端干这个活儿比较合适,这样可以统一管控不同业务的客户端,不用不同的客户端各自实现; 服务端天然持有客户端资源(对象或者连接). 遇到过的方式如下:
管理的客户端对象增加时间戳变量,当客户端访问时候刷新.2. 启动定时器,定时器时间到达后判断持有的所有对象中哪些超时(now - timetick)\u0026gt;timeout, 剔除.

至于客户端那边则不用关注,下次在没有重新建立连接的时候请求服务,服务端会失败的.


推荐阅读