zoukankan      html  css  js  c++  java
  • [netty4][netty-handler]netty之idle handler处理

    1. 初始化时记录idle时间,并启动一个延时任务,延时时间为idle时间,延时任务是io.netty.handler.timeout.IdleStateHandler.AllIdleTimeoutTask
    2. channelReadComplete 会更新lastReadTime,lastWriteTime是在write操作返回的ChannelFuture实例上挂上listener监听operationComplete动作来更新的,详细参见io.netty.handler.timeout.IdleStateHandler.writeListener
    3. AllIdleTimeoutTask 任务逻辑中会取lastReadTime, lastWriteTime大值,并拿nextDelay减去他们,这样就能得到下次任务要延期多就检查执行。

    比如一开始是10:00,5分钟idle时间,那么会在10:05时检查(延迟5分钟),如果在10:04发生了读写,那么在10:05检查时算出下一次延迟启动任务是4分钟后即10:09分。

    读写超时是基于此做的事件,检查机制类似。
    且在netty4中未使用 HashedWheelTimer,而是在线NioEventLoop的spin loop中完成触发。在spin loop中会从io.netty.util.concurrent.AbstractScheduledEventExecutor.scheduledTaskQueue中peek出最前面(也是最早到达的定时任务)的看其deadline是否小于当前时间,如果是则执行。
    HashedWheelTimer是在netty3中用来做idle检测的。

  • 相关阅读:
    设计模式大赛 -- 大话设计模式
    访问者模式 -- 大话设计模式
    puts的用处
    scanf的使用
    iOS,手势识别简单使用
    iOS,多媒体,地图相关
    iOS,文本输入,键盘相关
    iOS,XMPP本地环境搭建和框架使用
    iOS,自动布局autoresizing和auto layout,VFL语言
    iOS,图片处理
  • 原文地址:https://www.cnblogs.com/simoncook/p/11980435.html
Copyright © 2011-2022 走看看