Package org.apache.hc.core5.reactor
Class DefaultListeningIOReactor
- java.lang.Object
-
- org.apache.hc.core5.reactor.AbstractIOReactorBase
-
- org.apache.hc.core5.reactor.DefaultListeningIOReactor
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,ModalCloseable,ConnectionAcceptor,ConnectionInitiator,IOReactor,IOReactorService
public class DefaultListeningIOReactor extends AbstractIOReactorBase implements ConnectionAcceptor
Multi-core I/O reactor that can act as bothConnectionInitiatorandConnectionAcceptor. Internally this I/O reactor distributes newly created I/O session equally across multiple I/O worker threads for a more optimal resource utilization and a better I/O performance. Usually it is recommended to have one worker I/O reactor per physical CPU core.- Since:
- 4.0
-
-
Field Summary
Fields Modifier and Type Field Description private static java.util.concurrent.ThreadFactoryDISPATCH_THREAD_FACTORYprivate MultiCoreIOReactorioReactorprivate SingleCoreListeningIOReactorlistenerprivate static java.util.concurrent.ThreadFactoryLISTENER_THREAD_FACTORYprivate intworkerCountprivate SingleCoreIOReactor[]workersprivate IOWorkers.SelectorworkerSelector
-
Constructor Summary
Constructors Constructor Description DefaultListeningIOReactor(IOEventHandlerFactory eventHandlerFactory)Creates an instance of DefaultListeningIOReactor with default configuration.DefaultListeningIOReactor(IOEventHandlerFactory eventHandlerFactory, IOReactorConfig ioReactorConfig, java.util.concurrent.ThreadFactory dispatchThreadFactory, java.util.concurrent.ThreadFactory listenerThreadFactory, Decorator<IOSession> ioSessionDecorator, Callback<java.lang.Exception> exceptionCallback, IOSessionListener sessionListener, Callback<IOSession> sessionShutdownCallback)Creates an instance of DefaultListeningIOReactor with the given configuration.DefaultListeningIOReactor(IOEventHandlerFactory eventHandlerFactory, IOReactorConfig config, Callback<IOSession> sessionShutdownCallback)Creates an instance of DefaultListeningIOReactor with the given configuration.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidawaitShutdown(TimeValue waitTime)Blocks for the given period of time in milliseconds awaiting the completion of the reactor shutdown.voidclose()voidclose(CloseMode closeMode)Shuts down the I/O reactor either gracefully or immediately.private voidenqueueChannel(ChannelEntry entry)java.util.Set<ListenerEndpoint>getEndpoints()Returns a set of endpoints for this I/O reactor.IOReactorStatusgetStatus()Returns the current status of the reactor.(package private) IOWorkers.SelectorgetWorkerSelector()voidinitiateShutdown()Initiates shutdown of the reactor without blocking.java.util.concurrent.Future<ListenerEndpoint>listen(java.net.SocketAddress address)java.util.concurrent.Future<ListenerEndpoint>listen(java.net.SocketAddress address, java.lang.Object attachment, FutureCallback<ListenerEndpoint> callback)Opens a new listener endpoint with the given socket address.java.util.concurrent.Future<ListenerEndpoint>listen(java.net.SocketAddress address, FutureCallback<ListenerEndpoint> callback)Opens a new listener endpoint with the given socket address.voidpause()Suspends the I/O reactor preventing it from accepting new connections on all active endpoints.voidresume()Resumes the I/O reactor restoring its ability to accept incoming connections on all active endpoints.voidstart()Starts I/O reactor.-
Methods inherited from class org.apache.hc.core5.reactor.AbstractIOReactorBase
connect
-
-
-
-
Field Detail
-
DISPATCH_THREAD_FACTORY
private static final java.util.concurrent.ThreadFactory DISPATCH_THREAD_FACTORY
-
LISTENER_THREAD_FACTORY
private static final java.util.concurrent.ThreadFactory LISTENER_THREAD_FACTORY
-
workerCount
private final int workerCount
-
workers
private final SingleCoreIOReactor[] workers
-
listener
private final SingleCoreListeningIOReactor listener
-
ioReactor
private final MultiCoreIOReactor ioReactor
-
workerSelector
private final IOWorkers.Selector workerSelector
-
-
Constructor Detail
-
DefaultListeningIOReactor
public DefaultListeningIOReactor(IOEventHandlerFactory eventHandlerFactory, IOReactorConfig ioReactorConfig, java.util.concurrent.ThreadFactory dispatchThreadFactory, java.util.concurrent.ThreadFactory listenerThreadFactory, Decorator<IOSession> ioSessionDecorator, Callback<java.lang.Exception> exceptionCallback, IOSessionListener sessionListener, Callback<IOSession> sessionShutdownCallback)
Creates an instance of DefaultListeningIOReactor with the given configuration.- Parameters:
eventHandlerFactory- the factory to create I/O event handlers.ioReactorConfig- I/O reactor configuration.listenerThreadFactory- the factory to create listener thread. Can benull.- Since:
- 5.0
-
DefaultListeningIOReactor
public DefaultListeningIOReactor(IOEventHandlerFactory eventHandlerFactory, IOReactorConfig config, Callback<IOSession> sessionShutdownCallback)
Creates an instance of DefaultListeningIOReactor with the given configuration.- Parameters:
eventHandlerFactory- the factory to create I/O event handlers.config- I/O reactor configuration. Can benull.- Since:
- 5.0
-
DefaultListeningIOReactor
public DefaultListeningIOReactor(IOEventHandlerFactory eventHandlerFactory)
Creates an instance of DefaultListeningIOReactor with default configuration.- Parameters:
eventHandlerFactory- the factory to create I/O event handlers.- Since:
- 5.0
-
-
Method Detail
-
start
public void start()
Description copied from interface:IOReactorServiceStarts I/O reactor.- Specified by:
startin interfaceIOReactorService
-
listen
public java.util.concurrent.Future<ListenerEndpoint> listen(java.net.SocketAddress address, java.lang.Object attachment, FutureCallback<ListenerEndpoint> callback)
Description copied from interface:ConnectionAcceptorOpens a new listener endpoint with the given socket address. Once the endpoint is fully initialized it starts accepting incoming connections and propagates I/O activity notifications to the I/O event dispatcher.- Specified by:
listenin interfaceConnectionAcceptor- Parameters:
address- the socket address to listen on.attachment- the attachment object.callback- the result callback.- Returns:
- listener endpoint.
-
listen
public java.util.concurrent.Future<ListenerEndpoint> listen(java.net.SocketAddress address, FutureCallback<ListenerEndpoint> callback)
Description copied from interface:ConnectionAcceptorOpens a new listener endpoint with the given socket address. Once the endpoint is fully initialized it starts accepting incoming connections and propagates I/O activity notifications to the I/O event dispatcher.- Specified by:
listenin interfaceConnectionAcceptor- Parameters:
address- the socket address to listen on.callback- the result callback.- Returns:
- listener endpoint.
-
listen
public java.util.concurrent.Future<ListenerEndpoint> listen(java.net.SocketAddress address)
-
getEndpoints
public java.util.Set<ListenerEndpoint> getEndpoints()
Description copied from interface:ConnectionAcceptorReturns a set of endpoints for this I/O reactor.- Specified by:
getEndpointsin interfaceConnectionAcceptor- Returns:
- set of endpoints.
-
pause
public void pause() throws java.io.IOExceptionDescription copied from interface:ConnectionAcceptorSuspends the I/O reactor preventing it from accepting new connections on all active endpoints.- Specified by:
pausein interfaceConnectionAcceptor- Throws:
java.io.IOException- in case of an I/O error.
-
resume
public void resume() throws java.io.IOExceptionDescription copied from interface:ConnectionAcceptorResumes the I/O reactor restoring its ability to accept incoming connections on all active endpoints.- Specified by:
resumein interfaceConnectionAcceptor- Throws:
java.io.IOException- in case of an I/O error.
-
getStatus
public IOReactorStatus getStatus()
Description copied from interface:IOReactorReturns the current status of the reactor.
-
getWorkerSelector
IOWorkers.Selector getWorkerSelector()
- Specified by:
getWorkerSelectorin classAbstractIOReactorBase
-
enqueueChannel
private void enqueueChannel(ChannelEntry entry)
-
initiateShutdown
public void initiateShutdown()
Description copied from interface:IOReactorInitiates shutdown of the reactor without blocking. The reactor is expected to terminate all active connections, to shut down itself and to release system resources it currently holds- Specified by:
initiateShutdownin interfaceIOReactor
-
awaitShutdown
public void awaitShutdown(TimeValue waitTime) throws java.lang.InterruptedException
Description copied from interface:IOReactorBlocks for the given period of time in milliseconds awaiting the completion of the reactor shutdown.- Specified by:
awaitShutdownin interfaceIOReactor- Parameters:
waitTime- wait time.- Throws:
java.lang.InterruptedException
-
close
public void close(CloseMode closeMode)
Description copied from interface:IOReactorShuts down the I/O reactor either gracefully or immediately. During graceful shutdown individual I/O sessions should be informed about imminent termination and be given a grace period to complete the ongoing I/O sessions. During immediate shutdown all ongoing I/O sessions get aborted immediately.- Specified by:
closein interfaceIOReactor- Specified by:
closein interfaceModalCloseable- Parameters:
closeMode- How to close the receiver.
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Throws:
java.io.IOException
-
-