服务端定义一个UInt64变量计数器,每秒+1客户端也定义一个UInt64变量计数器,也是每秒+1客户端十秒发送一次心跳,发送的时候把客户端自己的UInt64变量的值发送给服务端。服务端收到之后,把客户端发送来的值记录下来。服务端每30秒循环一下 客户端LIST列表,把他们的值提取出来。对比服务端自己的计数器:服务端计数器的值 减去 客户端发送心跳包时的值,如果结果大于 30,说明客户端至少有两次没有发送心跳了 就判定客户端掉线了---------------------------------------还有没有更好的心跳包方法?
用一个定时器 来发心跳包撒
楼主描述那种 双发都能发起通信,不知道是否是业务需要。不过 不管是否双发都能主动通信 心跳部分 还是客户端发起 服务端收到心跳后 记录该客户端 最后一次与服务器通信时间。服务端只需要判断客户端最后一次通信时间超过多长时间阀值 才认为客户端掉线。如果心跳=1分钟。那么这个阀值定义成3分钟 就是说连续3次心跳没收到 就任务该客户端掉线。还有你在测试的时候 靠自身的程序来记录收发 不一定可靠。你可以用抓包工具抓客户端和服务器的数据收发 看看是否有掉包的情况