## org.mortbay.jetty.nio
Class SelectChannelConnector

    java.lang.Object
      org.mortbay.component.AbstractLifeCycle
          org.mortbay.jetty.AbstractBuffers
              org.mortbay.jetty.AbstractConnector
                  org.mortbay.jetty.nio.AbstractNIOConnector
                      org.mortbay.jetty.nio.SelectChannelConnector

All Implemented Interfaces:
  LifeCycle, Buffers, Connector, NIOConnector

Direct Known Subclasses:
  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. When a filter or servlet calls getEvent on a Continuation, a `RetryRequest` runtime exception is thrown to allow the thread to exit the current request handling. Jetty will catch this exception and 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.

Author:
  gregw

Nested Class Summary
`static class` `SelectChannelConnector.ConnectorEndPoint`
`static class` `SelectChannelConnector.RetryContinuation`

Field Summary

Fields inherited from class org.mortbay.jetty.AbstractConnector
`_lowResourceMaxIdleTime, _maxIdleTime, _soLingerTime`

Fields inherited from class org.mortbay.jetty.AbstractBuffers
`_loss, BUFFER_LOSS_RATE`

Constructor Summary
`SelectChannelConnector()` Constructor.

Method Summary
`void` `accept(int acceptorID)`
`void` `close()`
`void` `customize(EndPoint endpoint, Request request)` Customize a request for an endpoint.
`protected void` `doStart()`
`protected void` `doStop()`
`Object` `getConnection()`
`boolean` `getDelaySelectKeyUpdate()` Get delay select key update If true, the select set is not updated when a endpoint is dispatched for reading.
`int` `getLocalPort()`
`long` `getLowResourcesConnections()`
`long` `getLowResourcesMaxIdleTime()`
`protected Connection` `newConnection(SocketChannel channel, SelectChannelEndPoint endpoint)`
`Continuation` `newContinuation()`
`protected SelectChannelEndPoint` `newEndPoint(SocketChannel channel, SelectorManager.SelectSet selectSet, SelectionKey key)`
`void` `open()` Opens the connector
`void` `persist(EndPoint endpoint)` Persist an endpoint.
`void` `setDelaySelectKeyUpdate(boolean delay)`
`void` `setLowResourceMaxIdleTime(int lowResourcesMaxIdleTime)` Set the period in ms that a connection is allowed to be idle when this there are more than `getLowResourcesConnections()` connections.
`void` `setLowResourcesConnections(long lowResourcesConnections)` Set the number of connections, which if exceeded places this manager in low resources state.
`void` `setLowResourcesMaxIdleTime(long lowResourcesMaxIdleTime)` Deprecated. use `setLowResourceMaxIdleTime(int)`
`void` `setMaxIdleTime(int maxIdleTime)`

Methods inherited from class org.mortbay.jetty.nio.AbstractNIOConnector
`getUseDirectBuffers, newBuffer, setUseDirectBuffers`

Methods inherited from class org.mortbay.jetty.AbstractConnector

`configure, connectionClosed, connectionOpened, getAcceptorPriorityOffset, getAcceptors, getAcceptQueueSize, getConfidentialPort, getConfidentialScheme, getConnections, getConnectionsDurationAve, getConnectionsDurationMax, getConnectionsDurationMin, getConnectionsDurationTotal, getConnectionsOpen, getConnectionsOpenMax, getConnectionsOpenMin, getConnectionsRequestsAve, getConnectionsRequestsMax, getConnectionsRequestsMin, getHost, getIntegralPort, getIntegralScheme, getLowResourceMaxIdleTime, getMaxIdleTime, getName, getPort, getRequests, getResolveNames, getReuseAddress, getServer, getSoLingerTime, getStatsOn, getStatsOnMs, getThreadPool, isConfidential, isIntegral, join, setAcceptorPriorityOffset, setAcceptors, setAcceptQueueSize, setConfidentialPort, setConfidentialScheme, setHost, setIntegralPort, setIntegralScheme, setName, setPort, setResolveNames, setReuseAddress, setServer, setSoLingerTime, setStatsOn, setThreadPool, statsReset, stopAccept, toString`

Methods inherited from class org.mortbay.jetty.AbstractBuffers
`getBuffer, getHeaderBufferSize, getRequestBufferSize, getResponseBufferSize, returnBuffer, setHeaderBufferSize, setRequestBufferSize, setResponseBufferSize`

Methods inherited from class org.mortbay.component.AbstractLifeCycle
`isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, start, stop`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

Methods inherited from interface org.mortbay.jetty.Connector
`getHeaderBufferSize, getRequestBufferSize, getResponseBufferSize, setHeaderBufferSize, setRequestBufferSize, setResponseBufferSize`

Methods inherited from interface org.mortbay.component.LifeCycle
`isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, start, stop`

Methods inherited from interface org.mortbay.io.Buffers
`getBuffer, returnBuffer`

Constructor Detail

### SelectChannelConnector

    public SelectChannelConnector()

  Constructor.

Method Detail

### 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`

### getConnection

    public Object getConnection()

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

### getDelaySelectKeyUpdate

    public boolean getDelaySelectKeyUpdate()

  Get delay select key update If true, the select set is not updated when a endpoint is dispatched for reading. The assumption is that the task will be short and thus will probably be complete before the select is tried again.

  Returns:
    Returns the assumeShortDispatch.

### getLocalPort

    public int getLocalPort()

  Returns:
    The actual port the connector is listening on or -1 if there is no port or the connector is not open.

### newContinuation

    public Continuation newContinuation()

  Specified by:
    `newContinuation` in interface `Connector`
  Overrides:
    `newContinuation` in class `AbstractConnector`

### open

    public void open()
              throws IOException

  Description copied from interface: `Connector`
  Opens the connector

  Throws:
    `IOException`

### setDelaySelectKeyUpdate

    public void setDelaySelectKeyUpdate(boolean delay)

  Parameters:
    `delay` - If true, updating a `SelectionKey` is delayed until a redundant event is schedules. This is an optimization that assumes event handling can be completed before the next select completes.

### setMaxIdleTime

    public void setMaxIdleTime(int maxIdleTime)

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

### getLowResourcesConnections

    public long getLowResourcesConnections()

  Returns:
    the lowResourcesConnections

### setLowResourcesConnections

    public void setLowResourcesConnections(long 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(long)}`

### getLowResourcesMaxIdleTime

    public long getLowResourcesMaxIdleTime()

  Returns:
    the lowResourcesMaxIdleTime

### setLowResourcesMaxIdleTime

    public void setLowResourcesMaxIdleTime(long lowResourcesMaxIdleTime)

  Deprecated. use `setLowResourceMaxIdleTime(int)`

  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.

  Parameters:
    `lowResourcesMaxIdleTime` - the period in ms that a connection is allowed to be idle when resources are low.
  See Also:
    `#setMaxIdleTime(long)}`

### setLowResourceMaxIdleTime

    public void setLowResourceMaxIdleTime(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.

  Specified by:
    `setLowResourceMaxIdleTime` in interface `Connector`
  Overrides:
    `setLowResourceMaxIdleTime` in class `AbstractConnector`
  Parameters:
    `lowResourcesMaxIdleTime` - the period in ms that a connection is allowed to be idle when resources are low.
  See Also:
    `#setMaxIdleTime(long)}`

### doStart

    protected void doStart()
                    throws Exception

  Overrides:
    `doStart` in class `AbstractConnector`
  Throws:
    `Exception`

### doStop

    protected void doStop()
                   throws Exception

  Overrides:
    `doStop` in class `AbstractConnector`
  Throws:
    `Exception`

### newEndPoint

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

  Throws:
    `IOException`

### newConnection

    protected Connection newConnection(SocketChannel channel,
                                       SelectChannelEndPoint endpoint)

Copyright © 2007 Mort Bay Consulting. All Rights Reserved.