Class AbstractIOReactor
- All Implemented Interfaces:
IOReactor
- Direct Known Subclasses:
BaseIOReactor
IOReactor
that can used as a subclass
for more specialized I/O reactors. It is based on a single Selector
instance.- Since:
- 4.0
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Queue
<InterestOpEntry> private final boolean
private final Queue
<ChannelEntry> private final Selector
private final long
private IOReactorStatus
private final Object
-
Constructor Summary
ConstructorsConstructorDescriptionAbstractIOReactor
(long selectTimeout) Creates new AbstractIOReactor instance.AbstractIOReactor
(long selectTimeout, boolean interestOpsQueueing) Creates new AbstractIOReactor instance. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract void
acceptable
(SelectionKey key) Triggered when the key signalsSelectionKey.OP_ACCEPT
readiness.void
addChannel
(ChannelEntry channelEntry) Adds new channel entry.void
awaitShutdown
(long timeout) Blocks for the given period of time in milliseconds awaiting the completion of the reactor shutdown.protected void
Closes out all active channels registered with the selector of this I/O reactor.protected void
Closes out all new channels pending registration with the selector of this I/O reactor.protected void
Closes out all I/O sessions maintained by this I/O reactor.protected abstract void
connectable
(SelectionKey key) Triggered when the key signalsSelectionKey.OP_CONNECT
readiness.protected void
execute()
Activates the I/O reactor.boolean
Returnstrue
if interest Ops queueing is enabled,false
otherwise.protected IOSession
getSession
(SelectionKey key) ObtainsIOSession
instance associated with the given selection key.Returns the current status of the reactor.void
Attempts graceful shutdown of this I/O reactor.void
Attempts force-shutdown of this I/O reactor.private void
protected void
processEvent
(SelectionKey key) Processes new event on the given selection key.private void
processEvents
(Set<SelectionKey> selectedKeys) private void
private void
protected void
queueClosedSession
(IOSession session) Queues the given I/O session to be processed asynchronously as closed.private boolean
queueInterestOps
(InterestOpEntry entry) protected abstract void
readable
(SelectionKey key) Triggered when the key signalsSelectionKey.OP_READ
readiness.protected void
sessionClosed
(IOSession session) Triggered when a session has been closed.protected void
sessionCreated
(SelectionKey key, IOSession session) Triggered when new session has been created.protected void
sessionTimedOut
(IOSession session) Triggered when a session has timed out.void
shutdown()
Initiates shutdown of the reactor and blocks for a default period of time waiting for the reactor to terminate all active connections, to shut down itself and to release system resources it currently holds.void
shutdown
(long gracePeriod) Initiates shutdown of the reactor and blocks approximately for the given period of time in milliseconds waiting for the reactor to terminate all active connections, to shut down itself and to release system resources it currently holds.protected void
timeoutCheck
(SelectionKey key, long now) Triggered to verify whether the I/O session associated with the given selection key has not timed out.protected abstract void
validate
(Set<SelectionKey> keys) Triggered to validate keys currently registered with the selector.protected abstract void
writable
(SelectionKey key) Triggered when the key signalsSelectionKey.OP_WRITE
readiness.
-
Field Details
-
status
-
statusMutex
-
selectTimeout
private final long selectTimeout -
interestOpsQueueing
private final boolean interestOpsQueueing -
selector
-
sessions
-
interestOpsQueue
-
closedSessions
-
newChannels
-
-
Constructor Details
-
AbstractIOReactor
Creates new AbstractIOReactor instance.- Parameters:
selectTimeout
- the select timeout.- Throws:
IOReactorException
- in case if a non-recoverable I/O error.
-
AbstractIOReactor
Creates new AbstractIOReactor instance.- Parameters:
selectTimeout
- the select timeout.interestOpsQueueing
- Ops queueing flag.- Throws:
IOReactorException
- in case if a non-recoverable I/O error.- Since:
- 4.1
-
-
Method Details
-
acceptable
Triggered when the key signalsSelectionKey.OP_ACCEPT
readiness.Super-classes can implement this method to react to the event.
- Parameters:
key
- the selection key.
-
connectable
Triggered when the key signalsSelectionKey.OP_CONNECT
readiness.Super-classes can implement this method to react to the event.
- Parameters:
key
- the selection key.
-
readable
Triggered when the key signalsSelectionKey.OP_READ
readiness.Super-classes can implement this method to react to the event.
- Parameters:
key
- the selection key.
-
writable
Triggered when the key signalsSelectionKey.OP_WRITE
readiness.Super-classes can implement this method to react to the event.
- Parameters:
key
- the selection key.
-
validate
Triggered to validate keys currently registered with the selector. This method is called after each I/O select loop.Super-classes can implement this method to run validity checks on active sessions and include additional processing that needs to be executed after each I/O select loop.
- Parameters:
keys
- all selection keys registered with the selector.
-
sessionCreated
Triggered when new session has been created.Super-classes can implement this method to react to the event.
- Parameters:
key
- the selection key.session
- new I/O session.
-
sessionClosed
Triggered when a session has been closed.Super-classes can implement this method to react to the event.
- Parameters:
session
- closed I/O session.
-
sessionTimedOut
Triggered when a session has timed out.Super-classes can implement this method to react to the event.
- Parameters:
session
- timed out I/O session.
-
getSession
ObtainsIOSession
instance associated with the given selection key.- Parameters:
key
- the selection key.- Returns:
- I/O session.
-
getStatus
Description copied from interface:IOReactor
Returns the current status of the reactor. -
getInterestOpsQueueing
public boolean getInterestOpsQueueing()Returnstrue
if interest Ops queueing is enabled,false
otherwise.- Since:
- 4.1
-
addChannel
Adds new channel entry. The channel will be asynchronously registered with the selector.- Parameters:
channelEntry
- the channel entry.
-
execute
Activates the I/O reactor. The I/O reactor will start reacting to I/O events and triggering notification methods.This method will enter the infinite I/O select loop on the
Selector
instance associated with this I/O reactor.The method will remain blocked unto the I/O reactor is shut down or the execution thread is interrupted.
- Throws:
InterruptedIOException
- if the dispatch thread is interrupted.IOReactorException
- in case if a non-recoverable I/O error.- See Also:
-
processEvents
-
processEvent
Processes new event on the given selection key.- Parameters:
key
- the selection key that triggered an event.
-
queueClosedSession
Queues the given I/O session to be processed asynchronously as closed.- Parameters:
session
- the closed I/O session.
-
processNewChannels
- Throws:
IOReactorException
-
processClosedSessions
private void processClosedSessions() -
processPendingInterestOps
private void processPendingInterestOps() -
queueInterestOps
-
timeoutCheck
Triggered to verify whether the I/O session associated with the given selection key has not timed out.Super-classes can implement this method to react to the event.
- Parameters:
key
- the selection key.now
- current time as long value.
-
closeSessions
protected void closeSessions()Closes out all I/O sessions maintained by this I/O reactor. -
closeNewChannels
Closes out all new channels pending registration with the selector of this I/O reactor.- Throws:
IOReactorException
- - not thrown currently
-
closeActiveChannels
Closes out all active channels registered with the selector of this I/O reactor.- Throws:
IOReactorException
- - not thrown currently
-
gracefulShutdown
public void gracefulShutdown()Attempts graceful shutdown of this I/O reactor. -
hardShutdown
Attempts force-shutdown of this I/O reactor.- Throws:
IOReactorException
-
awaitShutdown
Blocks for the given period of time in milliseconds awaiting the completion of the reactor shutdown.- Parameters:
timeout
- the maximum wait time.- Throws:
InterruptedException
- if interrupted.
-
shutdown
Description copied from interface:IOReactor
Initiates shutdown of the reactor and blocks approximately for the given period of time in milliseconds waiting for the reactor to terminate all active connections, to shut down itself and to release system resources it currently holds.- Specified by:
shutdown
in interfaceIOReactor
- Parameters:
gracePeriod
- wait time in milliseconds.- Throws:
IOReactorException
-
shutdown
Description copied from interface:IOReactor
Initiates shutdown of the reactor and blocks for a default period of time waiting for the reactor to terminate all active connections, to shut down itself and to release system resources it currently holds. It is up to individual implementations to decide for how long this method can remain blocked.- Specified by:
shutdown
in interfaceIOReactor
- Throws:
IOReactorException
-