转载连接: http://www.cnblogs.com/scy251147/p/4230426.html
因为工作关系,经常用到心跳包。之前是在服务端中的连接的实体中保持一个timer,每秒加一,每次服务端接到客户端的心跳,就会把计数置为0。 当累加到20秒的时候,服务端会接到客户端抛出的掉线函数回调,就会视为客户端掉线,然后从缓存中删掉掉线用户。
实际测试结果表明,这种判断掉线的方式非常靠谱。7*24小时运行不会出现任何异常。但是每个实体保持一个timer,服务器的开销太大了。
所以这里我想到一种方式,就是在实体中包含一个 DateTime LastReceiveHeartBeatTime字段,每当客户端来了心跳,服务端就会将这个字段更新一次。
然后服务端只需要开一个timer,每隔20秒钟巡查一次实体中的这个字段和当前时间的差值,即可来判断设备是否掉线。
这样就大大的减小了服务端的负担。