java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.http2.client.HTTP2Client
- All Implemented Interfaces:
org.eclipse.jetty.util.component.Container,org.eclipse.jetty.util.component.Destroyable,org.eclipse.jetty.util.component.Dumpable,org.eclipse.jetty.util.component.Dumpable.DumpableContainer,org.eclipse.jetty.util.component.LifeCycle
@ManagedObject
public class HTTP2Client
extends org.eclipse.jetty.util.component.ContainerLifeCycle
HTTP2Client provides an asynchronous, non-blocking implementation to send HTTP/2 frames to a server.
Typical usage:
// Create and start HTTP2Client.
HTTP2Client client = new HTTP2Client();
client.start();
SslContextFactory sslContextFactory = client.getClientConnector().getSslContextFactory();
// Connect to host.
String host = "webtide.com";
int port = 443;
FuturePromise<Session> sessionPromise = new FuturePromise<>();
client.connect(sslContextFactory, new InetSocketAddress(host, port), new ServerSessionListener.Adapter(), sessionPromise);
// Obtain the client Session object.
Session session = sessionPromise.get(5, TimeUnit.SECONDS);
// Prepare the HTTP request headers.
HttpFields requestFields = new HttpFields();
requestFields.put("User-Agent", client.getClass().getName() + "/" + Jetty.VERSION);
// Prepare the HTTP request object.
MetaData.Request request = new MetaData.Request("PUT", HttpURI.from("https://" + host + ":" + port + "/"), HttpVersion.HTTP_2, requestFields);
// Create the HTTP/2 HEADERS frame representing the HTTP request.
HeadersFrame headersFrame = new HeadersFrame(request, null, false);
// Prepare the listener to receive the HTTP response frames.
Stream.Listener responseListener = new new Stream.Listener.Adapter()
{
@Override
public void onHeaders(Stream stream, HeadersFrame frame)
{
System.err.println(frame);
}
@Override
public void onData(Stream stream, DataFrame frame, Callback callback)
{
System.err.println(frame);
callback.succeeded();
}
};
// Send the HEADERS frame to create a stream.
FuturePromise<Stream> streamPromise = new FuturePromise<>();
session.newStream(headersFrame, streamPromise, responseListener);
Stream stream = streamPromise.get(5, TimeUnit.SECONDS);
// Use the Stream object to send request content, if any, using a DATA frame.
ByteBuffer content = ...;
DataFrame requestContent = new DataFrame(stream.getId(), content, true);
stream.data(requestContent, Callback.NOOP);
// When done, stop the client.
client.stop();
-
Nested Class Summary
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.ListenerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
org.eclipse.jetty.util.component.Dumpable.DumpableContainerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
org.eclipse.jetty.util.component.LifeCycle.Listener -
Field Summary
Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, STARTED, STARTING, STOPPED, STOPPINGFields inherited from interface org.eclipse.jetty.util.component.Dumpable
KEY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidaccept(SocketChannel channel, org.eclipse.jetty.io.ClientConnectionFactory factory, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise) voidaccept(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, SocketChannel channel, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise) CompletableFuture<org.eclipse.jetty.http2.api.Session> connect(SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener) voidconnect(SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise) voidconnect(SocketAddress address, org.eclipse.jetty.io.ClientConnectionFactory factory, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise, Map<String, Object> context) CompletableFuture<org.eclipse.jetty.http2.api.Session> connect(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener) voidconnect(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise) voidconnect(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise, Map<String, Object> context) org.eclipse.jetty.io.ByteBufferPoolorg.eclipse.jetty.io.ClientConnectorlongorg.eclipse.jetty.http2.FlowControlStrategy.FactorylongintintintintintintDeprecated.intintDeprecated.intintintintorg.eclipse.jetty.util.thread.SchedulerintlongbooleanbooleanbooleanbooleanvoidsetBindAddress(SocketAddress bindAddress) voidsetByteBufferPool(org.eclipse.jetty.io.ByteBufferPool bufferPool) voidsetConnectBlocking(boolean connectBlocking) voidsetConnectTimeout(long connectTimeout) voidsetExecutor(Executor executor) voidsetFlowControlStrategyFactory(org.eclipse.jetty.http2.FlowControlStrategy.Factory flowControlStrategyFactory) voidsetIdleTimeout(long idleTimeout) voidsetInitialSessionRecvWindow(int initialSessionRecvWindow) voidsetInitialStreamRecvWindow(int initialStreamRecvWindow) voidsetInputBufferSize(int inputBufferSize) voidsetMaxConcurrentPushedStreams(int maxConcurrentPushedStreams) voidsetMaxDecoderTableCapacity(int maxDecoderTableCapacity) voidsetMaxDynamicTableSize(int maxTableSize) Deprecated.voidsetMaxEncoderTableCapacity(int maxEncoderTableCapacity) Sets the limit for the encoder HPACK dynamic table capacity.voidsetMaxFrameLength(int maxFrameSize) Deprecated.voidsetMaxFrameSize(int maxFrameSize) voidsetMaxHeaderBlockFragment(int maxHeaderBlockFragment) voidsetMaxResponseHeadersSize(int maxResponseHeadersSize) voidsetMaxSettingsKeys(int maxSettingsKeys) voidsetProtocols(List<String> protocols) voidsetScheduler(org.eclipse.jetty.util.thread.Scheduler scheduler) voidsetSelectors(int selectors) voidsetStreamIdleTimeout(long streamIdleTimeout) voidsetUseALPN(boolean useALPN) voidsetUseInputDirectByteBuffers(boolean useInputDirectByteBuffers) voidsetUseOutputDirectByteBuffers(boolean useOutputDirectByteBuffers) Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, destroy, doStart, doStop, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeansMethods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.eclipse.jetty.util.component.Container
getCachedBeans, getEventListenersMethods inherited from interface org.eclipse.jetty.util.component.Dumpable
dumpSelfMethods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpable
-
Constructor Details
-
HTTP2Client
public HTTP2Client() -
HTTP2Client
public HTTP2Client(org.eclipse.jetty.io.ClientConnector connector)
-
-
Method Details
-
getClientConnector
public org.eclipse.jetty.io.ClientConnector getClientConnector() -
getExecutor
-
setExecutor
-
getScheduler
public org.eclipse.jetty.util.thread.Scheduler getScheduler() -
setScheduler
public void setScheduler(org.eclipse.jetty.util.thread.Scheduler scheduler) -
getByteBufferPool
public org.eclipse.jetty.io.ByteBufferPool getByteBufferPool() -
setByteBufferPool
public void setByteBufferPool(org.eclipse.jetty.io.ByteBufferPool bufferPool) -
getFlowControlStrategyFactory
public org.eclipse.jetty.http2.FlowControlStrategy.Factory getFlowControlStrategyFactory() -
setFlowControlStrategyFactory
public void setFlowControlStrategyFactory(org.eclipse.jetty.http2.FlowControlStrategy.Factory flowControlStrategyFactory) -
getSelectors
@ManagedAttribute("The number of selectors") public int getSelectors() -
setSelectors
public void setSelectors(int selectors) -
getIdleTimeout
@ManagedAttribute("The idle timeout in milliseconds") public long getIdleTimeout() -
setIdleTimeout
public void setIdleTimeout(long idleTimeout) -
getStreamIdleTimeout
@ManagedAttribute("The stream idle timeout in milliseconds") public long getStreamIdleTimeout() -
setStreamIdleTimeout
public void setStreamIdleTimeout(long streamIdleTimeout) -
getConnectTimeout
@ManagedAttribute("The connect timeout in milliseconds") public long getConnectTimeout() -
setConnectTimeout
public void setConnectTimeout(long connectTimeout) -
isConnectBlocking
@ManagedAttribute("Whether the connect() operation is blocking") public boolean isConnectBlocking() -
setConnectBlocking
public void setConnectBlocking(boolean connectBlocking) -
getBindAddress
-
setBindAddress
-
getInputBufferSize
@ManagedAttribute("The size of the buffer used to read from the network") public int getInputBufferSize() -
setInputBufferSize
public void setInputBufferSize(int inputBufferSize) -
getProtocols
-
setProtocols
-
getInitialSessionRecvWindow
@ManagedAttribute("The initial size of session\'s flow control receive window") public int getInitialSessionRecvWindow() -
setInitialSessionRecvWindow
public void setInitialSessionRecvWindow(int initialSessionRecvWindow) -
getInitialStreamRecvWindow
@ManagedAttribute("The initial size of stream\'s flow control receive window") public int getInitialStreamRecvWindow() -
setInitialStreamRecvWindow
public void setInitialStreamRecvWindow(int initialStreamRecvWindow) -
getMaxFrameLength
Deprecated. -
setMaxFrameLength
Deprecated. -
getMaxFrameSize
@ManagedAttribute("The max frame size in bytes") public int getMaxFrameSize() -
setMaxFrameSize
public void setMaxFrameSize(int maxFrameSize) -
getMaxConcurrentPushedStreams
@ManagedAttribute("The max number of concurrent pushed streams") public int getMaxConcurrentPushedStreams() -
setMaxConcurrentPushedStreams
public void setMaxConcurrentPushedStreams(int maxConcurrentPushedStreams) -
getMaxSettingsKeys
@ManagedAttribute("The max number of keys in all SETTINGS frames") public int getMaxSettingsKeys() -
setMaxSettingsKeys
public void setMaxSettingsKeys(int maxSettingsKeys) -
getMaxEncoderTableCapacity
@ManagedAttribute("The HPACK encoder dynamic table maximum capacity") public int getMaxEncoderTableCapacity() -
setMaxEncoderTableCapacity
public void setMaxEncoderTableCapacity(int maxEncoderTableCapacity) Sets the limit for the encoder HPACK dynamic table capacity.
Setting this value to
0disables the use of the dynamic table.- Parameters:
maxEncoderTableCapacity- The HPACK encoder dynamic table maximum capacity
-
getMaxDecoderTableCapacity
@ManagedAttribute("The HPACK decoder dynamic table maximum capacity") public int getMaxDecoderTableCapacity() -
setMaxDecoderTableCapacity
public void setMaxDecoderTableCapacity(int maxDecoderTableCapacity) -
getMaxDynamicTableSize
Deprecated. -
setMaxDynamicTableSize
Deprecated. -
getMaxHeaderBlockFragment
@ManagedAttribute("The max size of header block fragments") public int getMaxHeaderBlockFragment() -
setMaxHeaderBlockFragment
public void setMaxHeaderBlockFragment(int maxHeaderBlockFragment) -
getMaxResponseHeadersSize
@ManagedAttribute("The max size of response headers") public int getMaxResponseHeadersSize() -
setMaxResponseHeadersSize
public void setMaxResponseHeadersSize(int maxResponseHeadersSize) -
isUseInputDirectByteBuffers
@ManagedAttribute("Whether to use direct ByteBuffers for reading") public boolean isUseInputDirectByteBuffers() -
setUseInputDirectByteBuffers
public void setUseInputDirectByteBuffers(boolean useInputDirectByteBuffers) -
isUseOutputDirectByteBuffers
@ManagedAttribute("Whether to use direct ByteBuffers for writing") public boolean isUseOutputDirectByteBuffers() -
setUseOutputDirectByteBuffers
public void setUseOutputDirectByteBuffers(boolean useOutputDirectByteBuffers) -
isUseALPN
@ManagedAttribute("Whether ALPN should be used when establishing connections") public boolean isUseALPN() -
setUseALPN
public void setUseALPN(boolean useALPN) -
connect
public CompletableFuture<org.eclipse.jetty.http2.api.Session> connect(SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener) -
connect
public void connect(SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise) -
connect
public CompletableFuture<org.eclipse.jetty.http2.api.Session> connect(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener) -
connect
public void connect(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise) -
connect
public void connect(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise, Map<String, Object> context) -
connect
public void connect(SocketAddress address, org.eclipse.jetty.io.ClientConnectionFactory factory, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise, Map<String, Object> context) -
accept
public void accept(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, SocketChannel channel, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise) -
accept
public void accept(SocketChannel channel, org.eclipse.jetty.io.ClientConnectionFactory factory, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise)
-