博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

时间轮管理空闲链接

Posted on 2016-12-21 11:45  bw_0927  阅读(132)  评论(0)    收藏  举报

https://kernelmaker.github.io/2016/05/03/TimingWheel.html

http://www.cnblogs.com/my_life/articles/5392133.html

 

muduo P.250

 

有没有什么不记录时间,超时后自动淘汰的办法呢?有!首先有一个定长队列,队列长度和设定的超时时间一样,假如超时时间是10s,那么队列长度就是10,每次从队尾插入一个新成员的时候,淘汰对头的成员,是不是感觉有点接近了?

没错,队列的每个成员是一个链表的head指针,链表的每个节点就是对应每个客户端的Conn对象,假如有新的连接过来,accept线程构造好一个Conn对象,将它插入到队列尾的链表中,代表还有10s过期,

然后,每过1s,就在队尾插入新的空head指针,删除对头被顶出来的链表(关闭超时客户端连接),假如在2s的链表中,有一个客户端来了新的请求,就将他从2s的链表中摘出来,插入到10s的链表,这样也就刷新了超时时间【存在不停的插入删除动作,不见得有多好吧】

通过这样的结构实现了超时客户端的淘汰