public class WriteRequestFilter extends IoFilterAdapter
IoEventQueueHandler to an IoSession's
WriteRequest queue to provide accurate write queue status tracking.
The biggest difference from OrderedThreadPoolExecutor and
UnorderedThreadPoolExecutor is that IoEventQueueHandler.polled(Object, IoEvent)
is invoked when the write operation is completed by an IoProcessor,
consequently providing the accurate tracking of the write request queue
status to the IoEventQueueHandler.
Most common usage of this filter could be detecting an IoSession
which writes too fast which will cause OutOfMemoryError soon:
session.getFilterChain().addLast(
"writeThrottle",
new WriteRequestFilter(new IoEventQueueThrottle()));
IoEventQueueHandler implementation such as IoEventQueueThrottle
in the IoProcessor thread. It's because an IoProcessor
thread is what processes the WriteRequests and notifies related
WriteFutures; the IoEventQueueHandler implementation that
waits for the size of the write request queue to decrease will never wake
up. To use such an handler, you have to insert an ExecutorFilter
before this filter or call IoSession.write(Object) method always
from a different thread.IoFilter.NextFilter| Constructor and Description |
|---|
WriteRequestFilter()
Creates a new instance with a new default
IoEventQueueThrottle. |
WriteRequestFilter(IoEventQueueHandler queueHandler)
Creates a new instance with the specified
IoEventQueueHandler. |
| Modifier and Type | Method and Description |
|---|---|
void |
filterWrite(IoFilter.NextFilter nextFilter,
IoSession session,
WriteRequest writeRequest)
Filters
IoSession.write(Object) method invocation. |
IoEventQueueHandler |
getQueueHandler()
Returns the
IoEventQueueHandler which is attached to this
filter. |
destroy, exceptionCaught, filterClose, init, messageReceived, messageSent, onPostAdd, onPostRemove, onPreAdd, onPreRemove, sessionClosed, sessionCreated, sessionIdle, sessionOpened, toStringpublic WriteRequestFilter()
IoEventQueueThrottle.public WriteRequestFilter(IoEventQueueHandler queueHandler)
IoEventQueueHandler.public IoEventQueueHandler getQueueHandler()
IoEventQueueHandler which is attached to this
filter.public void filterWrite(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception
IoFilterAdapterIoSession.write(Object) method invocation.filterWrite in interface IoFilterfilterWrite in class IoFilterAdapterException