1、定时器实现。
定时器的实现可以使用堆排序(小根堆)的方式实现。
2、连接链表。
将所有的连接的上下文使用一个链表连接起来。最不活跃的放在链首,最活跃的房子链表的尾部。由于链接检测所使用的超时定时器相对固定(因为超时时间一般都是固定,并且属于粗粒度的定时器),所以使用链表。一个连接如果进入活动状态就将它从链表中删除然后插到链表的末尾。这样就可以避免使用全局的定时器,毕竟小根堆的调整的时间复杂度是对数级别的,而链表的删除和插入是很简单的事情,时间复杂度是常数级别的。
3、粗精度定时器。
通常来说,大多数应用,定时器的使用1秒作为最小精度就足够了。使用粗精度的定时器可以将多个定时器同时激发,从而减少定时器的花销。
4、粗精度连接保活检测。
同样连接的保活检测也是不需要高精度的,也就是说比如使用60秒的保活时间,其实出现误差60-120秒的都是可以容忍的。
居于此,只要使用一个60秒的定时器就可以实现连接的保活处理。就是定时器每60秒检查一次连接链表的链首就可以知道是否有链接长期没有活动,然后进行处理,直到链表的链首的超时时间小于60秒为止。
阅读(829) | 评论(0) | 转发(0) |