Interface HttpClientTransport
- All Superinterfaces:
ClientConnectionFactory
,HttpClient.Aware
,Invocable
- All Known Implementing Classes:
AbstractConnectorHttpClientTransport
,AbstractHttpClientTransport
,HttpClientTransportDynamic
,HttpClientTransportOverFCGI
,HttpClientTransportOverHTTP
,HttpClientTransportOverHTTP2
,HttpClientTransportOverHTTP3
HttpClientTransport
represents what transport implementations should provide
in order to plug in a different transport for HttpClient
.
While the HttpClient
APIs define the HTTP semantic (request, response, headers, etc.)
how an HTTP exchange is carried over the network depends on implementations of this class.
The default implementation uses the HTTP protocol to carry over the network the HTTP exchange, but the HTTP exchange may also be carried using the FCGI protocol, the HTTP/2 protocol or, in the future, other protocols.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.eclipse.jetty.io.ClientConnectionFactory
ClientConnectionFactory.Decorator, ClientConnectionFactory.Info, ClientConnectionFactory.Wrapper
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.Invocable
Invocable.Callable, Invocable.InvocationType, Invocable.ReadyTask, Invocable.Task
-
Field Summary
Fields inherited from interface org.eclipse.jetty.io.ClientConnectionFactory
CONTEXT_KEY
Fields inherited from interface org.eclipse.jetty.util.thread.Invocable
__nonBlocking, NOOP
-
Method Summary
Modifier and TypeMethodDescriptionvoid
connect
(SocketAddress address, Map<String, Object> context) Establishes a physical connection to the givenaddress
.newDestination
(Origin origin) Creates a new, transport-specific,HttpDestination
object.Creates a new Origin with the given request.void
Set the factory for ConnectionPool instances.void
setHttpClient
(HttpClient client) Sets theHttpClient
instance on this transport.void
setInvocationType
(Invocable.InvocationType invocationType) Sets theInvocable.InvocationType
associated with thisHttpClientTransport
.Methods inherited from interface org.eclipse.jetty.io.ClientConnectionFactory
customize, newConnection
-
Method Details
-
setHttpClient
Sets theHttpClient
instance on this transport.This is needed because of a chicken-egg problem: in order to create the
HttpClient
a HttpClientTransport is needed, that therefore cannot have a reference yet to theHttpClient
.- Specified by:
setHttpClient
in interfaceHttpClient.Aware
- Parameters:
client
- theHttpClient
that uses this transport.
-
newOrigin
-
newDestination
Creates a new, transport-specific,HttpDestination
object.HttpDestination
controls the destination-connection cardinality: protocols like HTTP have 1-N cardinality, while multiplexed protocols like HTTP/2 have a 1-1 cardinality.- Parameters:
origin
- the destination origin- Returns:
- a new, transport-specific,
HttpDestination
object
-
connect
Establishes a physical connection to the givenaddress
.- Parameters:
address
- the address to connect tocontext
- the context information to establish the connection
-
getConnectionPoolFactory
ConnectionPool.Factory getConnectionPoolFactory()- Returns:
- the factory for ConnectionPool instances
-
setConnectionPoolFactory
Set the factory for ConnectionPool instances.- Parameters:
factory
- the factory for ConnectionPool instances
-
getInvocationType
Invocable.InvocationType getInvocationType()- Specified by:
getInvocationType
in interfaceInvocable
- Returns:
- the
Invocable.InvocationType
associated with thisHttpClientTransport
. - See Also:
-
setInvocationType
Sets the
Invocable.InvocationType
associated with thisHttpClientTransport
.The values are typically either:
Invocable.InvocationType.BLOCKING
, to indicate that response listeners are executing blocking code, for example blocking network I/O, JDBC, etc.Invocable.InvocationType.NON_BLOCKING
, to indicate that response listeners are executing non-blocking code.
By default, the value is
Invocable.InvocationType.BLOCKING
.A response listener declared to be
Invocable.InvocationType.BLOCKING
incurs in one additional context switch, where the NIO processing thread delegates the response processing to another thread. This ensures that the NIO processing thread can immediately continue with other NIO processing activities, if any (for example, processing another connection). This also means that processing of different connections is parallelized.Invocable.InvocationType.BLOCKING
must be used when you want response listeners to be invoked by virtual threads.On the other hand, a response listener declared to be
Invocable.InvocationType.NON_BLOCKING
does not incur in the additional context switch, and therefore it is potentially more efficient. However, the processing of different connections is serialized, which means that the last connection will be processed only after the previous connections (and their respective response listeners) have been processed.A response listener declared to be
Invocable.InvocationType.NON_BLOCKING
, but then executing blocking code, will block the NIO processing performed byHttpClient
's implementation: the current connection and possibly other connections will not be further processed, until the blocking response listener returns.- Parameters:
invocationType
- theInvocable.InvocationType
associated with thisHttpClientTransport
.- See Also:
-