org.eclipse.jetty.server.nio

## Class SelectChannelConnector

- java.lang.Object
- - org.eclipse.jetty.util.component.AbstractLifeCycle
  - - org.eclipse.jetty.util.component.AggregateLifeCycle
    - - org.eclipse.jetty.server.AbstractConnector
      - - org.eclipse.jetty.server.nio.AbstractNIOConnector
        - - org.eclipse.jetty.server.nio.SelectChannelConnector

- All Implemented Interfaces:
    HttpBuffers, Connector, NIOConnector, Destroyable, Dumpable, LifeCycle
  Direct Known Subclasses:
    InheritedChannelConnector, NetworkTrafficSelectChannelConnector, SslSelectChannelConnector

      public class SelectChannelConnector
      extends AbstractNIOConnector

  Selecting NIO connector.

  This connector uses efficient NIO buffers with a non blocking threading model. Direct NIO buffers are used and threads are only allocated to connections with requests. Synchronization is used to simulate blocking for the servlet API, and any unflushed content at the end of request handling is written asynchronously.

  This connector is best used when there are a many connections that have idle periods.

  When used with `Continuation`, threadless waits are supported. If a filter or servlet returns after calling `Continuation.suspend()` or when a runtime exception is thrown from a call to `Continuation.undispatch()`, Jetty will will not send a response to the client. Instead the thread is released and the Continuation is placed on the timer queue. If the Continuation timeout expires, or it's resume method is called, then the request is again allocated a thread and the request is retried. The limitation of this approach is that request content is not available on the retried request, thus if possible it should be read after the continuation or saved as a request attribute or as the associated object of the Continuation instance.

  Apache XBean:
    element="nioConnector" description="Creates an NIO based socket connector"

- - ### Nested Class Summary

    - ### 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.LifeCycle

      `LifeCycle.Listener`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected ServerSocketChannel` | `_acceptChannel`

    - ### Fields inherited from class org.eclipse.jetty.server.AbstractConnector

      `_buffers, _lowResourceMaxIdleTime, _maxIdleTime, _soLingerTime`

    - ### Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

      `_listeners, FAILED, RUNNING, STARTED, STARTING, STOPPED, STOPPING`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `SelectChannelConnector()` Constructor.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `accept(int acceptorID)`
    `void` | `close()`
    `void` | `customize(EndPoint endpoint, Request request)` Customize a request for an endpoint.
    `protected void` | `doStart()` Start the managed lifecycle beans in the order they were added.
    `protected void` | `endPointClosed(SelectChannelEndPoint endpoint)`
    `Object` | `getConnection()`
    `int` | `getLocalPort()`
    `int` | `getLowResourcesConnections()`
    `int` | `getLowResourcesMaxIdleTime()`
    `SelectorManager` | `getSelectorManager()`
    `protected AsyncConnection` | `newConnection(SocketChannel channel, AsyncEndPoint endpoint)`
    `protected SelectChannelEndPoint` | `newEndPoint(SocketChannel channel, SelectorManager.SelectSet selectSet, SelectionKey key)`
    `void` | `open()` Opens the connector
    `void` | `persist(EndPoint endpoint)` Persist an endpoint.
    `void` | `setLowResourcesConnections(int lowResourcesConnections)` Set the number of connections, which if exceeded places this manager in low resources state.
    `void` | `setLowResourcesMaxIdleTime(int lowResourcesMaxIdleTime)` Set the period in ms that a connection is allowed to be idle when this there are more than `getLowResourcesConnections()` connections.
    `void` | `setMaxIdleTime(int maxIdleTime)` Set the maximum Idle time for a connection, which roughly translates to the `Socket.setSoTimeout(int)` call, although with NIO implementations other mechanisms may be used to implement the timeout.
    `void` | `setThreadPool(ThreadPool pool)` Set the ThreadPool.

    - ### Methods inherited from class org.eclipse.jetty.server.nio.AbstractNIOConnector

      `getUseDirectBuffers, setUseDirectBuffers`

    - ### Methods inherited from class org.eclipse.jetty.server.AbstractConnector

      `checkForwardedHeaders, configure, connectionClosed, connectionOpened, connectionUpgraded, doStop, getAcceptorPriorityOffset, getAcceptors, getAcceptQueueSize, getConfidentialPort, getConfidentialScheme, getConnections, getConnectionsDurationMax, getConnectionsDurationMean, getConnectionsDurationStdDev, getConnectionsDurationTotal, getConnectionsOpen, getConnectionsOpenMax, getConnectionsRequestsMax, getConnectionsRequestsMean, getConnectionsRequestsStdDev, getForwardedCipherSuiteHeader, getForwardedForHeader, getForwardedHostHeader, getForwardedProtoHeader, getForwardedServerHeader, getForwardedSslSessionIdHeader, getHost, getHostHeader, getIntegralPort, getIntegralScheme, getLeftMostFieldValue, getLowResourceMaxIdleTime, getMaxBuffers, getMaxIdleTime, getName, getPort, getRequestBuffers, getRequestBufferSize, getRequestBufferType, getRequestHeaderSize, getRequestHeaderType, getRequests, getResolveNames, getResponseBuffers, getResponseBufferSize, getResponseBufferType, getResponseHeaderSize, getResponseHeaderType, getReuseAddress, getServer, getSoLingerTime, getStatsOn, getStatsOnMs, getThreadPool, isConfidential, isForwarded, isIntegral, isLowResources, join, setAcceptorPriorityOffset, setAcceptors, setAcceptQueueSize, setConfidentialPort, setConfidentialScheme, setForwarded, setForwardedCipherSuiteHeader, setForwardedForHeader, setForwardedHostHeader, setForwardedProtoHeader, setForwardedServerHeader, setForwardedSslSessionIdHeader, setHost, setHostHeader, setIntegralPort, setIntegralScheme, setLowResourceMaxIdleTime, setMaxBuffers, setName, setPort, setRequestBuffers, setRequestBufferSize, setRequestHeaderSize, setResolveNames, setResponseBuffers, setResponseBufferSize, setResponseHeaderSize, setReuseAddress, setServer, setSoLingerTime, setStatsOn, statsReset, stopAccept, toString`

    - ### Methods inherited from class org.eclipse.jetty.util.component.AggregateLifeCycle

      `addBean, addBean, contains, destroy, dump, dump, dump, dump, dump, dumpObject, dumpStdErr, dumpThis, getBean, getBeans, getBeans, isManaged, manage, removeBean, removeBeans, unmanage`

    - ### Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

      `addLifeCycleListener, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop`

    - ### 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.LifeCycle

      `addLifeCycleListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop`

    - ### Methods inherited from interface org.eclipse.jetty.util.component.Dumpable

      `dump, dump`

- - ### Field Detail

    - #### _acceptChannel

          protected ServerSocketChannel _acceptChannel

  - ### Constructor Detail

    - #### SelectChannelConnector

          public SelectChannelConnector()

      Constructor.

  - ### Method Detail

    - #### setThreadPool

          public void setThreadPool(ThreadPool pool)

      Description copied from class: `AbstractConnector`
      Set the ThreadPool. The threadpool passed is added via `AggregateLifeCycle.addBean(Object)` so that it's lifecycle may be managed as a `AggregateLifeCycle`.
      Overrides:
        `setThreadPool` in class `AbstractConnector`
      Parameters:
        `pool` - the threadPool to set

    - #### accept

          public void accept(int acceptorID)
                      throws IOException

      Specified by:
        `accept` in class `AbstractConnector`
      Throws:
        `IOException`

    - #### close

          public void close()
                     throws IOException

      Throws:
        `IOException`

    - #### customize

          public void customize(EndPoint endpoint,
                       Request request)
                         throws IOException

      Description copied from interface: `Connector`
      Customize a request for an endpoint. Called on every request to allow customization of the request for the particular endpoint (eg security properties from a SSL connection).
      Specified by:
        `customize` in interface `Connector`
      Overrides:
        `customize` in class `AbstractConnector`
      Throws:
        `IOException`

    - #### persist

          public void persist(EndPoint endpoint)
                       throws IOException

      Description copied from interface: `Connector`
      Persist an endpoint. Called after every request if the connection is to remain open.
      Specified by:
        `persist` in interface `Connector`
      Overrides:
        `persist` in class `AbstractConnector`
      Throws:
        `IOException`

    - #### getSelectorManager

          public SelectorManager getSelectorManager()

    - #### getConnection

          public Object getConnection()

      Returns:
        the underlying socket, channel, buffer etc. for the connector.

    - #### getLocalPort

          public int getLocalPort()

      Returns:
        The actual port the connector is listening on or -1 if it has not been opened, or -2 if it has been closed.

    - #### open

          public void open()
                    throws IOException

      Description copied from interface: `Connector`
      Opens the connector
      Throws:
        `IOException`

    - #### setMaxIdleTime

          public void setMaxIdleTime(int maxIdleTime)

      Description copied from class: `AbstractConnector`
      Set the maximum Idle time for a connection, which roughly translates to the `Socket.setSoTimeout(int)` call, although with NIO implementations other mechanisms may be used to implement the timeout. The max idle time is applied:
      - When waiting for a new request to be received on a connection
      - When reading the headers and content of a request
      - When writing the headers and content of a response
      Jetty interprets this value as the maximum time between some progress being made on the connection. So if a single byte is read or written, then the timeout (if implemented by jetty) is reset. However, in many instances, the reading/writing is delegated to the JVM, and the semantic is more strictly enforced as the maximum time a single read/write operation can take. Note, that as Jetty supports writes of memory mapped file buffers, then a write may take many 10s of seconds for large content written to a slow device.

      Previously, Jetty supported separate idle timeouts and IO operation timeouts, however the expense of changing the value of soTimeout was significant, so these timeouts were merged. With the advent of NIO, it may be possible to again differentiate these values (if there is demand).

      Specified by:
        `setMaxIdleTime` in interface `Connector`
      Overrides:
        `setMaxIdleTime` in class `AbstractConnector`
      Parameters:
        `maxIdleTime` - The maxIdleTime to set.

    - #### getLowResourcesConnections

          public int getLowResourcesConnections()

      Returns:
        the lowResourcesConnections

    - #### setLowResourcesConnections

          public void setLowResourcesConnections(int lowResourcesConnections)

      Set the number of connections, which if exceeded places this manager in low resources state. This is not an exact measure as the connection count is averaged over the select sets.
      Parameters:
        `lowResourcesConnections` - the number of connections
      See Also:
        `setLowResourcesMaxIdleTime(int)`

    - #### getLowResourcesMaxIdleTime

          public int getLowResourcesMaxIdleTime()

      Overrides:
        `getLowResourcesMaxIdleTime` in class `AbstractConnector`
      Returns:
        the lowResourcesMaxIdleTime

    - #### setLowResourcesMaxIdleTime

          public void setLowResourcesMaxIdleTime(int lowResourcesMaxIdleTime)

      Set the period in ms that a connection is allowed to be idle when this there are more than `getLowResourcesConnections()` connections. This allows the server to rapidly close idle connections in order to gracefully handle high load situations.
      Overrides:
        `setLowResourcesMaxIdleTime` in class `AbstractConnector`
      Parameters:
        `lowResourcesMaxIdleTime` - the period in ms that a connection is allowed to be idle when resources are low.
      See Also:
        `setMaxIdleTime(int)`

    - #### doStart

          protected void doStart()
                          throws Exception

      Description copied from class: `AggregateLifeCycle`
      Start the managed lifecycle beans in the order they were added.
      Overrides:
        `doStart` in class `AbstractConnector`
      Throws:
        `Exception`
      See Also:
        `AbstractLifeCycle.doStart()`

    - #### newEndPoint

          protected SelectChannelEndPoint newEndPoint(SocketChannel channel,
                                          SelectorManager.SelectSet selectSet,
                                          SelectionKey key)
                                               throws IOException

      Throws:
        `IOException`

    - #### endPointClosed

          protected void endPointClosed(SelectChannelEndPoint endpoint)

    - #### newConnection

          protected AsyncConnection newConnection(SocketChannel channel,
                                      AsyncEndPoint endpoint)

Copyright © 1995-2016 Mort Bay Consulting. All Rights Reserved.