Home / Class/ IdleStateHandler Class — netty Architecture

IdleStateHandler Class — netty Architecture

Architecture documentation for the IdleStateHandler class in IdleStateHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  f7baaa36_50d8_55ab_5867_911f99fb154d["IdleStateHandler"]
  a1f123b7_92d5_8d02_8243_55137a597728["IdleStateHandler.java"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|defined in| a1f123b7_92d5_8d02_8243_55137a597728
  99890d9e_2f35_3577_4b34_1bdb3feb6c07["IdleStateHandler()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 99890d9e_2f35_3577_4b34_1bdb3feb6c07
  c474722d_b727_1122_2ff2_26dc19fe8ffb["getReaderIdleTimeInMillis()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| c474722d_b727_1122_2ff2_26dc19fe8ffb
  51b63593_dc28_1000_4a14_fc80c1356d96["getWriterIdleTimeInMillis()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 51b63593_dc28_1000_4a14_fc80c1356d96
  3808f8c7_ed26_981c_c71c_5c42c5af11c3["getAllIdleTimeInMillis()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 3808f8c7_ed26_981c_c71c_5c42c5af11c3
  5a9b45ea_9551_a12f_e358_971fea29c51f["handlerAdded()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 5a9b45ea_9551_a12f_e358_971fea29c51f
  24822fa2_75da_7f07_225a_24b99442441d["handlerRemoved()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 24822fa2_75da_7f07_225a_24b99442441d
  329d8a2f_0d26_eb2e_1d72_450cb465ce6c["channelRegistered()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 329d8a2f_0d26_eb2e_1d72_450cb465ce6c
  4f3a3baf_30e8_2b0d_6c6a_d067de69d6f6["channelActive()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 4f3a3baf_30e8_2b0d_6c6a_d067de69d6f6
  340f6f43_8144_9aa4_f84c_1da610fe42be["channelInactive()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 340f6f43_8144_9aa4_f84c_1da610fe42be
  e7ea1b5f_3903_2708_7ce7_322f0dfadd35["channelRead()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| e7ea1b5f_3903_2708_7ce7_322f0dfadd35
  0501ff1d_02d4_fa5c_d885_a5443f3401ed["channelReadComplete()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 0501ff1d_02d4_fa5c_d885_a5443f3401ed
  099837d4_aa97_556e_31c8_3733f83f88a5["write()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 099837d4_aa97_556e_31c8_3733f83f88a5
  2bbe846e_fa62_178a_9873_b1b1f62af3aa["resetReadTimeout()"]
  f7baaa36_50d8_55ab_5867_911f99fb154d -->|method| 2bbe846e_fa62_178a_9873_b1b1f62af3aa

Relationship Graph

Source Code

handler/src/main/java/io/netty/handler/timeout/IdleStateHandler.java lines 99–601

public class IdleStateHandler extends ChannelDuplexHandler {
    private static final long MIN_TIMEOUT_NANOS = TimeUnit.MILLISECONDS.toNanos(1);

    private final boolean observeOutput;
    private final long readerIdleTimeNanos;
    private final long writerIdleTimeNanos;
    private final long allIdleTimeNanos;

    private Ticker ticker = Ticker.systemTicker();

    private Future<?> readerIdleTimeout;
    private long lastReadTime;
    private boolean firstReaderIdleEvent = true;

    private Future<?> writerIdleTimeout;
    private long lastWriteTime;
    private boolean firstWriterIdleEvent = true;

    private Future<?> allIdleTimeout;
    private boolean firstAllIdleEvent = true;

    private byte state;
    private static final byte ST_INITIALIZED = 1;
    private static final byte ST_DESTROYED = 2;

    private boolean reading;

    private long lastChangeCheckTimeStamp;
    private int lastMessageHashCode;
    private long lastPendingWriteBytes;
    private long lastFlushProgress;
    // Not create a new ChannelFutureListener per write operation to reduce GC pressure.
    private final ChannelFutureListener writeListener = future -> {
        lastWriteTime = ticker.nanoTime();
        firstWriterIdleEvent = firstAllIdleEvent = true;
    };

    /**
     * Creates a new instance firing {@link IdleStateEvent}s.
     *
     * @param readerIdleTimeSeconds
     *        an {@link IdleStateEvent} whose state is {@link IdleState#READER_IDLE}
     *        will be triggered when no read was performed for the specified
     *        period of time.  Specify {@code 0} to disable.
     * @param writerIdleTimeSeconds
     *        an {@link IdleStateEvent} whose state is {@link IdleState#WRITER_IDLE}
     *        will be triggered when no write was performed for the specified
     *        period of time.  Specify {@code 0} to disable.
     * @param allIdleTimeSeconds
     *        an {@link IdleStateEvent} whose state is {@link IdleState#ALL_IDLE}
     *        will be triggered when neither read nor write was performed for
     *        the specified period of time.  Specify {@code 0} to disable.
     */
    public IdleStateHandler(
            int readerIdleTimeSeconds,
            int writerIdleTimeSeconds,
            int allIdleTimeSeconds) {

        this(readerIdleTimeSeconds, writerIdleTimeSeconds, allIdleTimeSeconds,
             TimeUnit.SECONDS);
    }

    /**
     * @see #IdleStateHandler(boolean, long, long, long, TimeUnit)
     */
    public IdleStateHandler(
            long readerIdleTime, long writerIdleTime, long allIdleTime,
            TimeUnit unit) {
        this(false, readerIdleTime, writerIdleTime, allIdleTime, unit);
    }

    /**
     * Creates a new instance firing {@link IdleStateEvent}s.
     *
     * @param observeOutput
     *        whether or not the consumption of {@code bytes} should be taken into
     *        consideration when assessing write idleness. The default is {@code false}.
     * @param readerIdleTime
     *        an {@link IdleStateEvent} whose state is {@link IdleState#READER_IDLE}
     *        will be triggered when no read was performed for the specified
     *        period of time.  Specify {@code 0} to disable.

Frequently Asked Questions

What is the IdleStateHandler class?
IdleStateHandler is a class in the netty codebase, defined in handler/src/main/java/io/netty/handler/timeout/IdleStateHandler.java.
Where is IdleStateHandler defined?
IdleStateHandler is defined in handler/src/main/java/io/netty/handler/timeout/IdleStateHandler.java at line 99.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free