Class HttpAsyncService
- java.lang.Object
-
- org.apache.http.nio.protocol.HttpAsyncService
-
- All Implemented Interfaces:
NHttpServerEventHandler
@Contract(threading=IMMUTABLE_CONDITIONAL) public class HttpAsyncService extends java.lang.Object implements NHttpServerEventHandler
HttpAsyncServiceis a fully asynchronous HTTP server side protocol handler based on the non-blocking (NIO) I/O model.HttpAsyncServerProtocolHandlertranslates individual events fired through theNHttpServerEventHandlerinterface into logically related HTTP message exchanges.Upon receiving an incoming request
HttpAsyncServiceverifies the message for compliance with the server expectations usingHttpAsyncExpectationVerifier, if provided, and thenHttpAsyncRequestHandlerMapperis used to map the request to a particularHttpAsyncRequestHandlerintended to handle the request with the given URI. The protocol handler uses the selectedHttpAsyncRequestHandlerinstance to process the incoming request and to generate an outgoing response.HttpAsyncServicerelies onHttpProcessorto generate mandatory protocol headers for all outgoing messages and apply common, cross-cutting message transformations to all incoming and outgoing messages, whereas individualHttpAsyncRequestHandlers are expected to implement application specific content generation and processing.Individual
HttpAsyncRequestHandlers do not have to submit a response immediately. They can defer transmission of an HTTP response back to the client without blocking the I/O thread by delegating the process of request handling to another service or a worker thread. HTTP response can be submitted as a later a later point of time once response content becomes available.- Since:
- 4.2
-
-
Constructor Summary
Constructors Constructor Description HttpAsyncService(HttpProcessor httpProcessor, ConnectionReuseStrategy connStrategy, HttpResponseFactory responseFactory, HttpAsyncRequestHandlerMapper handlerMapper, HttpAsyncExpectationVerifier expectationVerifier)Creates new instance ofHttpAsyncServerProtocolHandler.HttpAsyncService(HttpProcessor httpProcessor, ConnectionReuseStrategy connStrategy, HttpResponseFactory responseFactory, HttpAsyncRequestHandlerMapper handlerMapper, HttpAsyncExpectationVerifier expectationVerifier, ExceptionLogger exceptionLogger)Creates new instance ofHttpAsyncServerProtocolHandler.HttpAsyncService(HttpProcessor httpProcessor, ConnectionReuseStrategy connStrategy, HttpResponseFactory responseFactory, HttpAsyncRequestHandlerResolver handlerResolver, HttpAsyncExpectationVerifier expectationVerifier, HttpParams params)HttpAsyncService(HttpProcessor httpProcessor, ConnectionReuseStrategy connStrategy, HttpAsyncRequestHandlerResolver handlerResolver, HttpParams params)HttpAsyncService(HttpProcessor httpProcessor, HttpAsyncRequestHandlerMapper handlerMapper)Creates new instance ofHttpAsyncServerProtocolHandler.HttpAsyncService(HttpProcessor httpProcessor, HttpAsyncRequestHandlerMapper handlerMapper, ExceptionLogger exceptionLogger)Creates new instance ofHttpAsyncServerProtocolHandler.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclosed(NHttpServerConnection conn)Triggered when the connection is closed.voidconnected(NHttpServerConnection conn)Triggered when a new incoming connection is created.voidendOfInput(NHttpServerConnection conn)Triggered when the connection is closed by the opposite end point (half-closed).voidexception(NHttpServerConnection conn, java.lang.Exception cause)Triggered if an error occurs during the HTTP exchange.voidinputReady(NHttpServerConnection conn, ContentDecoder decoder)Triggered when the underlying channel is ready for reading a new portion of the request entity through the corresponding content decoder.voidoutputReady(NHttpServerConnection conn, ContentEncoder encoder)Triggered when the underlying channel is ready for writing a next portion of the response entity through the corresponding content encoder.voidrequestReceived(NHttpServerConnection conn)Triggered when a new HTTP request is received.voidresponseReady(NHttpServerConnection conn)Triggered when the connection is ready to accept a new HTTP response.voidtimeout(NHttpServerConnection conn)Triggered when no input is detected on this connection over the maximum period of inactivity.
-
-
-
Constructor Detail
-
HttpAsyncService
@Deprecated public HttpAsyncService(HttpProcessor httpProcessor, ConnectionReuseStrategy connStrategy, HttpResponseFactory responseFactory, HttpAsyncRequestHandlerResolver handlerResolver, HttpAsyncExpectationVerifier expectationVerifier, HttpParams params)
Deprecated.Creates new instance ofHttpAsyncServerProtocolHandler.- Parameters:
httpProcessor- HTTP protocol processor (required).connStrategy- Connection re-use strategy (required).responseFactory- HTTP response factory (required).handlerResolver- Request handler resolver.expectationVerifier- Request expectation verifier (optional).params- HTTP parameters (required).
-
HttpAsyncService
@Deprecated public HttpAsyncService(HttpProcessor httpProcessor, ConnectionReuseStrategy connStrategy, HttpAsyncRequestHandlerResolver handlerResolver, HttpParams params)
Deprecated.Creates new instance ofHttpAsyncServerProtocolHandler.- Parameters:
httpProcessor- HTTP protocol processor (required).connStrategy- Connection re-use strategy (required).handlerResolver- Request handler resolver.params- HTTP parameters (required).
-
HttpAsyncService
public HttpAsyncService(HttpProcessor httpProcessor, ConnectionReuseStrategy connStrategy, HttpResponseFactory responseFactory, HttpAsyncRequestHandlerMapper handlerMapper, HttpAsyncExpectationVerifier expectationVerifier)
Creates new instance ofHttpAsyncServerProtocolHandler.- Parameters:
httpProcessor- HTTP protocol processor.connStrategy- Connection re-use strategy. IfnullDefaultConnectionReuseStrategy.INSTANCEwill be used.responseFactory- HTTP response factory. IfnullDefaultHttpResponseFactory.INSTANCEwill be used.handlerMapper- Request handler mapper.expectationVerifier- Request expectation verifier. May benull.- Since:
- 4.3
-
HttpAsyncService
public HttpAsyncService(HttpProcessor httpProcessor, ConnectionReuseStrategy connStrategy, HttpResponseFactory responseFactory, HttpAsyncRequestHandlerMapper handlerMapper, HttpAsyncExpectationVerifier expectationVerifier, ExceptionLogger exceptionLogger)
Creates new instance ofHttpAsyncServerProtocolHandler.- Parameters:
httpProcessor- HTTP protocol processor.connStrategy- Connection re-use strategy. IfnullDefaultConnectionReuseStrategy.INSTANCEwill be used.responseFactory- HTTP response factory. IfnullDefaultHttpResponseFactory.INSTANCEwill be used.handlerMapper- Request handler mapper.expectationVerifier- Request expectation verifier. May benull.exceptionLogger- Exception logger. IfnullExceptionLogger.NO_OPwill be used. Please note that the exception logger will be only used to log I/O exception thrown while closingCloseableobjects (such asHttpConnection).- Since:
- 4.4
-
HttpAsyncService
public HttpAsyncService(HttpProcessor httpProcessor, HttpAsyncRequestHandlerMapper handlerMapper)
Creates new instance ofHttpAsyncServerProtocolHandler.- Parameters:
httpProcessor- HTTP protocol processor.handlerMapper- Request handler mapper.- Since:
- 4.3
-
HttpAsyncService
public HttpAsyncService(HttpProcessor httpProcessor, HttpAsyncRequestHandlerMapper handlerMapper, ExceptionLogger exceptionLogger)
Creates new instance ofHttpAsyncServerProtocolHandler.- Parameters:
httpProcessor- HTTP protocol processor.handlerMapper- Request handler mapper.exceptionLogger- Exception logger. IfnullExceptionLogger.NO_OPwill be used. Please note that the exception logger will be only used to log I/O exception thrown while closingCloseableobjects (such asHttpConnection).- Since:
- 4.4
-
-
Method Detail
-
connected
public void connected(NHttpServerConnection conn)
Description copied from interface:NHttpServerEventHandlerTriggered when a new incoming connection is created.- Specified by:
connectedin interfaceNHttpServerEventHandler- Parameters:
conn- new incoming connection HTTP connection.
-
closed
public void closed(NHttpServerConnection conn)
Description copied from interface:NHttpServerEventHandlerTriggered when the connection is closed.- Specified by:
closedin interfaceNHttpServerEventHandler- Parameters:
conn- closed HTTP connection.
-
exception
public void exception(NHttpServerConnection conn, java.lang.Exception cause)
Description copied from interface:NHttpServerEventHandlerTriggered if an error occurs during the HTTP exchange.- Specified by:
exceptionin interfaceNHttpServerEventHandler- Parameters:
conn- HTTP connection that caused an I/O errorcause- exception
-
requestReceived
public void requestReceived(NHttpServerConnection conn) throws java.io.IOException, HttpException
Description copied from interface:NHttpServerEventHandlerTriggered when a new HTTP request is received. The connection passed as a parameter to this method is guaranteed to return a valid HTTP request object.If the request received encloses a request entity this method will be followed a series of
NHttpServerEventHandler.inputReady(NHttpServerConnection, ContentDecoder)calls to transfer the request content.- Specified by:
requestReceivedin interfaceNHttpServerEventHandler- Parameters:
conn- HTTP connection that contains a new HTTP request- Throws:
java.io.IOExceptionHttpException- See Also:
NHttpServerConnection
-
inputReady
public void inputReady(NHttpServerConnection conn, ContentDecoder decoder) throws java.io.IOException, HttpException
Description copied from interface:NHttpServerEventHandlerTriggered when the underlying channel is ready for reading a new portion of the request entity through the corresponding content decoder.If the content consumer is unable to process incoming content, input event notifications can be temporarily suspended using
IOControlinterface (super interface ofNHttpServerConnection).Please note that the
NHttpServerConnectionandContentDecoderobjects are not thread-safe and should only be used within the context of this method call. TheIOControlobject can be shared and used on other thread to resume input event notifications when the handler is capable of processing more content.- Specified by:
inputReadyin interfaceNHttpServerEventHandler- Parameters:
conn- HTTP connection that can produce a new portion of the incoming request content.decoder- The content decoder to use to read content.- Throws:
java.io.IOExceptionHttpException- See Also:
NHttpServerConnection,ContentDecoder,IOControl
-
responseReady
public void responseReady(NHttpServerConnection conn) throws java.io.IOException, HttpException
Description copied from interface:NHttpServerEventHandlerTriggered when the connection is ready to accept a new HTTP response. The protocol handler does not have to submit a response if it is not ready.- Specified by:
responseReadyin interfaceNHttpServerEventHandler- Parameters:
conn- HTTP connection that contains an HTTP response- Throws:
java.io.IOExceptionHttpException- See Also:
NHttpServerConnection
-
outputReady
public void outputReady(NHttpServerConnection conn, ContentEncoder encoder) throws HttpException, java.io.IOException
Description copied from interface:NHttpServerEventHandlerTriggered when the underlying channel is ready for writing a next portion of the response entity through the corresponding content encoder.If the content producer is unable to generate outgoing content, output event notifications can be temporarily suspended using
IOControlinterface (super interface ofNHttpServerConnection).Please note that the
NHttpServerConnectionandContentEncoderobjects are not thread-safe and should only be used within the context of this method call. TheIOControlobject can be shared and used on other thread to resume output event notifications when more content is made available.- Specified by:
outputReadyin interfaceNHttpServerEventHandler- Parameters:
conn- HTTP connection that can accommodate a new portion of the outgoing response content.encoder- The content encoder to use to write content.- Throws:
HttpExceptionjava.io.IOException- See Also:
NHttpServerConnection,ContentEncoder,IOControl
-
endOfInput
public void endOfInput(NHttpServerConnection conn) throws java.io.IOException
Description copied from interface:NHttpServerEventHandlerTriggered when the connection is closed by the opposite end point (half-closed).- Specified by:
endOfInputin interfaceNHttpServerEventHandler- Parameters:
conn- half-closed HTTP connection.- Throws:
java.io.IOException
-
timeout
public void timeout(NHttpServerConnection conn) throws java.io.IOException
Description copied from interface:NHttpServerEventHandlerTriggered when no input is detected on this connection over the maximum period of inactivity.- Specified by:
timeoutin interfaceNHttpServerEventHandler- Parameters:
conn- HTTP connection that caused timeout condition.- Throws:
java.io.IOException
-
-