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 bothConnectionInitiator
andConnectionAcceptor
. 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.ThreadFactory
DISPATCH_THREAD_FACTORY
private MultiCoreIOReactor
ioReactor
private SingleCoreListeningIOReactor
listener
private static java.util.concurrent.ThreadFactory
LISTENER_THREAD_FACTORY
private int
workerCount
private SingleCoreIOReactor[]
workers
private IOWorkers.Selector
workerSelector
-
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 void
awaitShutdown(TimeValue waitTime)
Blocks for the given period of time in milliseconds awaiting the completion of the reactor shutdown.void
close()
void
close(CloseMode closeMode)
Shuts down the I/O reactor either gracefully or immediately.private void
enqueueChannel(ChannelEntry entry)
java.util.Set<ListenerEndpoint>
getEndpoints()
Returns a set of endpoints for this I/O reactor.IOReactorStatus
getStatus()
Returns the current status of the reactor.(package private) IOWorkers.Selector
getWorkerSelector()
void
initiateShutdown()
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.void
pause()
Suspends the I/O reactor preventing it from accepting new connections on all active endpoints.void
resume()
Resumes the I/O reactor restoring its ability to accept incoming connections on all active endpoints.void
start()
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:IOReactorService
Starts I/O reactor.- Specified by:
start
in interfaceIOReactorService
-
listen
public java.util.concurrent.Future<ListenerEndpoint> listen(java.net.SocketAddress address, java.lang.Object attachment, FutureCallback<ListenerEndpoint> callback)
Description copied from interface:ConnectionAcceptor
Opens 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:
listen
in 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:ConnectionAcceptor
Opens 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:
listen
in 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:ConnectionAcceptor
Returns a set of endpoints for this I/O reactor.- Specified by:
getEndpoints
in interfaceConnectionAcceptor
- Returns:
- set of endpoints.
-
pause
public void pause() throws java.io.IOException
Description copied from interface:ConnectionAcceptor
Suspends the I/O reactor preventing it from accepting new connections on all active endpoints.- Specified by:
pause
in interfaceConnectionAcceptor
- Throws:
java.io.IOException
- in case of an I/O error.
-
resume
public void resume() throws java.io.IOException
Description copied from interface:ConnectionAcceptor
Resumes the I/O reactor restoring its ability to accept incoming connections on all active endpoints.- Specified by:
resume
in interfaceConnectionAcceptor
- Throws:
java.io.IOException
- in case of an I/O error.
-
getStatus
public IOReactorStatus getStatus()
Description copied from interface:IOReactor
Returns the current status of the reactor.
-
getWorkerSelector
IOWorkers.Selector getWorkerSelector()
- Specified by:
getWorkerSelector
in classAbstractIOReactorBase
-
enqueueChannel
private void enqueueChannel(ChannelEntry entry)
-
initiateShutdown
public void initiateShutdown()
Description copied from interface:IOReactor
Initiates 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:
initiateShutdown
in interfaceIOReactor
-
awaitShutdown
public void awaitShutdown(TimeValue waitTime) throws java.lang.InterruptedException
Description copied from interface:IOReactor
Blocks for the given period of time in milliseconds awaiting the completion of the reactor shutdown.- Specified by:
awaitShutdown
in interfaceIOReactor
- Parameters:
waitTime
- wait time.- Throws:
java.lang.InterruptedException
-
close
public void close(CloseMode closeMode)
Description copied from interface:IOReactor
Shuts 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:
close
in interfaceIOReactor
- Specified by:
close
in interfaceModalCloseable
- Parameters:
closeMode
- How to close the receiver.
-
close
public void close() throws java.io.IOException
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Throws:
java.io.IOException
-
-