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.
Source
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