[netty4][netty-handler]netty之idle handler处理
2024-09-07 08:33:06
- 初始化时记录idle时间,并启动一个延时任务,延时时间为idle时间,延时任务是io.netty.handler.timeout.IdleStateHandler.AllIdleTimeoutTask
- channelReadComplete 会更新lastReadTime,lastWriteTime是在write操作返回的ChannelFuture实例上挂上listener监听operationComplete动作来更新的,详细参见io.netty.handler.timeout.IdleStateHandler.writeListener
- 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检测的。
最新文章
- IMEI串号
- c# txt文件的读写
- OpenCV3读取、写入和保存图像
- 同时存在两个或多个homestead 虚拟box
- BZOJ2005: [Noi2010]能量采集 莫比乌斯反演的另一种方法——nlogn筛
- Hadoop学习历程(四、运行一个真正的MapReduce程序)
- 基于嵌入式OS的任务设计-----任务划分
- 筛法求质——poj2262&;2909
- curl的简单使用步骤
- Python中append()与extend()的区别
- 性能测试Jmeter压测ZooKeeper-自定义java请求
- 【转】MySQL— 基础
- TCP/IP协议(7):应用层
- java hashcode的Delphi实现
- maven(视频学习)
- iOS 数据压缩与解压
- PhpStorm 克隆下来的项目改动,版本控制不起效果
- Java中应该返回零长度数组或空集合,而不是返回null(转)
- MySQL 使用 SSL 连接(附 Docker 例子)
- Visual Studio Code 配置 gulp