Class SelectorManager
- All Implemented Interfaces:
Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
- Direct Known Subclasses:
AbstractConnectorHttpClientTransport.ClientSelectorManager
,ServerConnector.ServerConnectorManager
SelectorManager
manages a number of ManagedSelector
s that
simplify the non-blocking primitives provided by the JVM via the java.nio
package.
SelectorManager
subclasses implement methods to return protocol-specific
EndPoint
s and Connection
s.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
A listener for accept events.Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener, Container.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainer
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final List<SelectorManager.AcceptListener>
private long
private ThreadPoolBudget.Lease
private final AtomicInteger
private final IntUnaryOperator
private final ManagedSelector[]
static final int
private final Executor
protected static final Logger
private final Scheduler
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
SelectorManager
(Executor executor, Scheduler scheduler) protected
SelectorManager
(Executor executor, Scheduler scheduler, int selectors) -
Method Summary
Modifier and TypeMethodDescriptionvoid
accept
(SelectableChannel channel) void
accept
(SelectableChannel channel, Object attachment) Registers a channel to perform non-blocking read/write operations.protected void
accepted
(SelectableChannel channel) Callback method when a channel is accepted from theServerSocketChannel
passed toacceptor(SelectableChannel)
.acceptor
(SelectableChannel server) Registers a server channel for accept operations.void
void
addEventListener
(EventListener listener) private ManagedSelector
void
connect
(SelectableChannel channel, Object attachment) Registers a channel to perform a non-blocking connect.void
connectionClosed
(Connection connection) Callback method invoked when a connection is closed.protected void
connectionFailed
(SelectableChannel channel, Throwable ex, Object attachment) Callback method invoked when a non-blocking connect cannot be completed.void
connectionOpened
(Connection connection) Callback method invoked when a connection is opened.private static int
defaultSelectors
(Executor executor) protected SelectableChannel
doAccept
(SelectableChannel server) protected boolean
doFinishConnect
(SelectableChannel channel) protected void
doStart()
Starts the managed lifecycle beans in the order they were added.protected void
doStop()
Stops the managed lifecycle beans in the reverse order they were added.protected void
endPointClosed
(EndPoint endpoint) Callback method invoked when an endpoint is closed.protected void
endPointOpened
(EndPoint endpoint) Callback method invoked when an endpoint is opened.protected void
Executes the given task in a different thread.long
Get the connect timeoutint
Deprecated.int
protected boolean
isConnectionPending
(SelectableChannel channel) abstract Connection
newConnection
(SelectableChannel channel, EndPoint endpoint, Object attachment) Factory method to createConnection
.protected abstract EndPoint
newEndPoint
(SelectableChannel channel, ManagedSelector selector, SelectionKey selectionKey) Factory method to createEndPoint
.protected Selector
protected ManagedSelector
newSelector
(int id) Factory method forManagedSelector
.protected void
onAccepted
(SelectableChannel channel) protected void
onAcceptFailed
(SelectableChannel channel, Throwable cause) protected void
onAccepting
(SelectableChannel channel) void
void
removeEventListener
(EventListener listener) void
setConnectTimeout
(long milliseconds) Set the connect timeout (in milliseconds)void
setReservedThreads
(int threads) Deprecated.Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpable
-
Field Details
-
DEFAULT_CONNECT_TIMEOUT
public static final int DEFAULT_CONNECT_TIMEOUT- See Also:
-
LOG
-
executor
-
scheduler
-
_selectors
-
_selectorIndex
-
_selectorIndexUpdate
-
_acceptListeners
-
_connectTimeout
private long _connectTimeout -
_lease
-
-
Constructor Details
-
SelectorManager
-
SelectorManager
- Parameters:
executor
- The executor to use for handling selectedEndPoint
sscheduler
- The scheduler to use for timing eventsselectors
- The number of selectors to use, or -1 for a default derived from a heuristic over available CPUs and thread pool size.
-
-
Method Details
-
defaultSelectors
-
getExecutor
-
getScheduler
-
getConnectTimeout
Get the connect timeout- Returns:
- the connect timeout (in milliseconds)
-
setConnectTimeout
public void setConnectTimeout(long milliseconds) Set the connect timeout (in milliseconds)- Parameters:
milliseconds
- the number of milliseconds for the timeout
-
getReservedThreads
Deprecated.- Returns:
- -1
-
setReservedThreads
Deprecated.- Parameters:
threads
- ignored
-
execute
Executes the given task in a different thread.- Parameters:
task
- the task to execute
-
getSelectorCount
- Returns:
- the number of selectors in use
-
chooseSelector
-
connect
Registers a channel to perform a non-blocking connect.
The channel must be set in non-blocking mode,
SocketChannel.connect(SocketAddress)
must be called prior to calling this method, and the connect operation must not be completed (the return value ofSocketChannel.connect(SocketAddress)
must be false).- Parameters:
channel
- the channel to registerattachment
- the attachment object- See Also:
-
accept
- Parameters:
channel
- the channel to accept- See Also:
-
accept
Registers a channel to perform non-blocking read/write operations.
This method is called just after a channel has been accepted by
ServerSocketChannel.accept()
, or just after having performed a blocking connect viaSocket.connect(SocketAddress, int)
, or just after a non-blocking connect viaSocketChannel.connect(SocketAddress)
that completed successfully.- Parameters:
channel
- the channel to registerattachment
- the attachment object
-
acceptor
Registers a server channel for accept operations. When a
SocketChannel
is accepted from the givenServerSocketChannel
then theaccepted(SelectableChannel)
method is called, which must be overridden by a derivation of this class to handle the accepted channel- Parameters:
server
- the server channel to register- Returns:
- A Closable that allows the acceptor to be cancelled
-
accepted
Callback method when a channel is accepted from theServerSocketChannel
passed toacceptor(SelectableChannel)
. The default impl throws anUnsupportedOperationException
, so it must be overridden by subclasses if a server channel is provided.- Parameters:
channel
- the- Throws:
IOException
- if unable to accept channel
-
doStart
Description copied from class:ContainerLifeCycle
Starts the managed lifecycle beans in the order they were added.- Overrides:
doStart
in classContainerLifeCycle
- Throws:
Exception
-
newSelector
Factory method for
ManagedSelector
.- Parameters:
id
- an identifier for theto create
- Returns:
- a new
ManagedSelector
-
doStop
Description copied from class:ContainerLifeCycle
Stops the managed lifecycle beans in the reverse order they were added.- Overrides:
doStop
in classContainerLifeCycle
- Throws:
Exception
-
endPointOpened
Callback method invoked when an endpoint is opened.
- Parameters:
endpoint
- the endpoint being opened
-
endPointClosed
Callback method invoked when an endpoint is closed.
- Parameters:
endpoint
- the endpoint being closed
-
connectionOpened
Callback method invoked when a connection is opened.
- Parameters:
connection
- the connection just opened
-
connectionClosed
Callback method invoked when a connection is closed.
- Parameters:
connection
- the connection just closed
-
doFinishConnect
- Throws:
IOException
-
isConnectionPending
-
doAccept
- Throws:
IOException
-
connectionFailed
Callback method invoked when a non-blocking connect cannot be completed.
By default it just logs with level warning.
- Parameters:
channel
- the channel that attempted the connectex
- the exception that caused the connect to failattachment
- the attachment object associated at registration
-
newSelector
- Throws:
IOException
-
newEndPoint
protected abstract EndPoint newEndPoint(SelectableChannel channel, ManagedSelector selector, SelectionKey selectionKey) throws IOException Factory method to create
EndPoint
.This method is invoked as a result of the registration of a channel via
connect(SelectableChannel, Object)
oraccept(SelectableChannel)
.- Parameters:
channel
- the channel associated to the endpointselector
- the selector the channel is registered toselectionKey
- the selection key- Returns:
- a new endpoint
- Throws:
IOException
- if the endPoint cannot be created- See Also:
-
newConnection
public abstract Connection newConnection(SelectableChannel channel, EndPoint endpoint, Object attachment) throws IOException Factory method to create
Connection
.- Parameters:
channel
- the channel associated to the connectionendpoint
- the endpointattachment
- the attachment- Returns:
- a new connection
- Throws:
IOException
- if unable to create new connection
-
addEventListener
-
removeEventListener
-
addAcceptListener
-
removeAcceptListener
-
onAccepting
-
onAcceptFailed
-
onAccepted
-