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检测的。

最新文章

  1. IMEI串号
  2. c# txt文件的读写
  3. OpenCV3读取、写入和保存图像
  4. 同时存在两个或多个homestead 虚拟box
  5. BZOJ2005: [Noi2010]能量采集 莫比乌斯反演的另一种方法——nlogn筛
  6. Hadoop学习历程(四、运行一个真正的MapReduce程序)
  7. 基于嵌入式OS的任务设计-----任务划分
  8. 筛法求质——poj2262&2909
  9. curl的简单使用步骤
  10. Python中append()与extend()的区别
  11. 性能测试Jmeter压测ZooKeeper-自定义java请求
  12. 【转】MySQL— 基础
  13. TCP/IP协议(7):应用层
  14. java hashcode的Delphi实现
  15. maven(视频学习)
  16. iOS 数据压缩与解压
  17. PhpStorm 克隆下来的项目改动,版本控制不起效果
  18. Java中应该返回零长度数组或空集合,而不是返回null(转)
  19. MySQL 使用 SSL 连接(附 Docker 例子)
  20. Visual Studio Code 配置 gulp

热门文章

  1. matplotlib常见图表绘制——极坐标图-雷达图、极轴图
  2. 抽象工厂模式(c++实现)
  3. 拆招黑客!github代码库大牛们如何应对黑客攻击
  4. 单例模式—Java实现
  5. 利用74HC595实现的流水灯 Arduino
  6. java基础(一)注释
  7. redis配置密码
  8. springboot2.2 集成 activity6 请假完整示例
  9. C/C++编程笔记:C语言入门知识点(一),请收藏C语言最全笔记!
  10. luogu P3264 [JLOI2015]管道连接