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 WriteRequest
s and notifies related
WriteFuture
s; 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, toString
public 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 java.lang.Exception
IoFilterAdapter
IoSession.write(Object)
method invocation.filterWrite
in interface IoFilter
filterWrite
in class IoFilterAdapter
java.lang.Exception
Copyright © 2004-2019 Apache MINA Project. All Rights Reserved.