美文网首页
IdleStateHandler

IdleStateHandler

作者: 简书徐小耳 | 来源:发表于2019-01-23 14:57 被阅读24次

    可以注册多个定时任务来进行读写和全部超时任务检测,也可以做心跳检测

    observeOutput:代表我们的outbounderbuffer的数据是否有变更,如果有变更 那么write和allIde都不会触发。
    先检测lastChangeCheckTimeStamp != lastWriteTime是否相等 如果不等且不是第一次则代表是由变更的 我们下面就不需要去计算剩余的bytebuf的hash和totalPendingWriteBytes的数量
    为了防止链接数量过多,我们一般设置write或者All,因为就算read事件触发了 ,但是有可能我们还在发送数据,但是一般write很长时间没有用,那么也不会受到read。
    注意fileRegin计算开启observeOutput也会算超时,因为一般文件很大,在这发送过程中其size固定为96(这是默认值),所以在这过程中就算比较totalPendingWriteBytes和bytebuf的hash也没有办法

    readerIdleTime:代表多久没有收到read消息了,这个时候我们可以发送个心跳给对端看看tcp是否还online,如果不是则关闭

    writerIdleTime:代表多久没有write消息了,如果时间过长 可以考虑关闭 也可以做心跳

    allIdleTime:包含上面的几个事件

    我们会在channelActive,channelRegistered方法时候初始化我们上山四个常量的值(内部通过state避免重复设置)
    然后设置对应的定时任务。
    当我们channelRead(可以更新读的超时时间),channelReadComplete可以更新lastReadTime用于observeOutput
    ,write方法通过添加监听者来更新写的时间,
    定时任务触发时先重新设置定时任务,然后去检测在这期间时间是否超时,如果超时执行userEventTriggered 传递event,没有超时就
    直接返回.
    我们在destory的时候会去取消这些定时任务

    相关文章

      网友评论

          本文标题:IdleStateHandler

          本文链接:https://www.haomeiwen.com/subject/wlwjjqtx.html