org.eclipse.jetty.server.nio
Class SelectChannelConnector

java.lang.Object
  extended by org.eclipse.jetty.util.component.AbstractLifeCycle
      extended by org.eclipse.jetty.http.HttpBuffers
          extended by org.eclipse.jetty.server.AbstractConnector
              extended by org.eclipse.jetty.server.nio.AbstractNIOConnector
                  extended by org.eclipse.jetty.server.nio.SelectChannelConnector
All Implemented Interfaces:
Connector, NIOConnector, LifeCycle
Direct Known Subclasses:
InheritedChannelConnector, 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 org.eclipse.jetty.server.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.


Nested Class Summary
 
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
 
Field Summary
protected  ServerSocketChannel _acceptChannel
           
 
Fields inherited from class org.eclipse.jetty.server.AbstractConnector
_lowResourceMaxIdleTime, _maxIdleTime, _soLingerTime
 
Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
_listeners, FAILED, RUNNING, STARTED, STARTING, STOPPED, STOPPING
 
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()
           
 void dump()
           
 Object getConnection()
           
 int getLocalPort()
           
 long getLowResourcesConnections()
           
 long getLowResourcesMaxIdleTime()
           
protected  Connection newConnection(SocketChannel channel, SelectChannelEndPoint endpoint)
           
protected  SelectChannelEndPoint newEndPoint(SocketChannel channel, SelectorManager.SelectSet selectSet, SelectionKey key)
           
 void open()
          Opens the connector
 void persist(EndPoint endpoint)
          Persist an endpoint.
 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)
          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.
 
Methods inherited from class org.eclipse.jetty.server.nio.AbstractNIOConnector
getUseDirectBuffers, isRequestHeader, isResponseHeader, newRequestBuffer, newRequestHeader, newResponseBuffer, newResponseHeader, setUseDirectBuffers
 
Methods inherited from class org.eclipse.jetty.server.AbstractConnector
checkForwardedHeaders, configure, connectionClosed, connectionOpened, getAcceptorPriorityOffset, getAcceptors, getAcceptQueueSize, getConfidentialPort, getConfidentialScheme, getConnections, getConnectionsDurationAve, getConnectionsDurationMax, getConnectionsDurationMin, getConnectionsDurationTotal, getConnectionsOpen, getConnectionsOpenMax, getConnectionsOpenMin, getConnectionsRequestsAve, getConnectionsRequestsMax, getConnectionsRequestsMin, getForwardedForHeader, getForwardedHostHeader, getForwardedServerHeader, getHost, getHostHeader, getIntegralPort, getIntegralScheme, getLeftMostValue, getLowResourceMaxIdleTime, getMaxIdleTime, getName, getPort, getRequests, getResolveNames, getReuseAddress, getServer, getSoLingerTime, getStatsOn, getStatsOnMs, getThreadPool, isConfidential, isForwarded, isIntegral, isLowResources, join, newBuffer, setAcceptorPriorityOffset, setAcceptors, setAcceptQueueSize, setConfidentialPort, setConfidentialScheme, setForwarded, setForwardedForHeader, setForwardedHostHeader, setForwardedServerHeader, setHost, setHostHeader, setIntegralPort, setIntegralScheme, setName, setPort, setResolveNames, setReuseAddress, setServer, setSoLingerTime, setStatsOn, setThreadPool, statsReset, stopAccept, toString
 
Methods inherited from class org.eclipse.jetty.http.HttpBuffers
getHeaderBufferSize, getRequestBuffers, getRequestBufferSize, getRequestHeaderSize, getResponseBuffers, getResponseBufferSize, getResponseHeaderSize, setHeaderBufferSize, setRequestBufferSize, setRequestHeaderSize, setResponseBufferSize, setResponseHeaderSize
 
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addLifeCycleListener, 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.server.Connector
getRequestBuffers, getRequestBufferSize, getRequestHeaderSize, getResponseBuffers, getResponseBufferSize, getResponseHeaderSize, setRequestBufferSize, setRequestHeaderSize, setResponseBufferSize, setResponseHeaderSize
 
Methods inherited from interface org.eclipse.jetty.util.component.LifeCycle
addLifeCycleListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
 

Field Detail

_acceptChannel

protected ServerSocketChannel _acceptChannel
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.

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.

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: 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 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)

dump

public void dump()


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