因为工作关系,经常用到心跳包。之前是在服务端中的连接的实体中保持一个timer,每秒加一,每次服务端接到客户端的心跳,就会把计数置为0。 当累加到20秒的时候,服务端会接到客户端抛出的掉线函数回调,就会视为客户端掉线,然后从缓存中删掉掉线用户。

实际测试结果表明,这种判断掉线的方式非常靠谱。7*24小时运行不会出现任何异常。但是每个实体保持一个timer,服务器的开销太大了。

所以这里我想到一种方式,就是在实体中包含一个 DateTime LastReceiveHeartBeatTime字段,每当客户端来了心跳,服务端就会将这个字段更新一次。

然后服务端只需要开一个timer,每隔20秒钟巡查一次实体中的这个字段和当前时间的差值,即可来判断设备是否掉线。

这样就大大的减小了服务端的负担。

posted on 2015-01-17 14:18  程序诗人  阅读(5202)  评论(5编辑  收藏  举报