Package org.eclipse.jetty.http2.client
Class HTTP2Client
- java.lang.Object
-
- org.eclipse.jetty.util.component.AbstractLifeCycle
-
- org.eclipse.jetty.util.component.ContainerLifeCycle
-
- org.eclipse.jetty.http2.client.HTTP2Client
-
- All Implemented Interfaces:
Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
@ManagedObject public class HTTP2Client extends 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
AbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopException
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener, Container.Listener
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainer
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
-
-
Constructor Summary
Constructors Constructor Description HTTP2Client()
HTTP2Client(ClientConnector connector)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
accept(java.nio.channels.SocketChannel channel, ClientConnectionFactory factory, Session.Listener listener, Promise<Session> promise)
void
accept(SslContextFactory sslContextFactory, java.nio.channels.SocketChannel channel, Session.Listener listener, Promise<Session> promise)
java.util.concurrent.CompletableFuture<Session>
connect(java.net.SocketAddress address, Session.Listener listener)
void
connect(java.net.SocketAddress address, Session.Listener listener, Promise<Session> promise)
void
connect(java.net.SocketAddress address, ClientConnectionFactory factory, Session.Listener listener, Promise<Session> promise, java.util.Map<java.lang.String,java.lang.Object> context)
java.util.concurrent.CompletableFuture<Session>
connect(SslContextFactory sslContextFactory, java.net.SocketAddress address, Session.Listener listener)
void
connect(SslContextFactory sslContextFactory, java.net.SocketAddress address, Session.Listener listener, Promise<Session> promise)
void
connect(SslContextFactory sslContextFactory, java.net.SocketAddress address, Session.Listener listener, Promise<Session> promise, java.util.Map<java.lang.String,java.lang.Object> context)
java.net.SocketAddress
getBindAddress()
ByteBufferPool
getByteBufferPool()
ClientConnector
getClientConnector()
long
getConnectTimeout()
java.util.concurrent.Executor
getExecutor()
FlowControlStrategy.Factory
getFlowControlStrategyFactory()
long
getIdleTimeout()
int
getInitialSessionRecvWindow()
int
getInitialStreamRecvWindow()
int
getInputBufferSize()
int
getMaxConcurrentPushedStreams()
int
getMaxDynamicTableSize()
int
getMaxFrameLength()
int
getMaxHeaderBlockFragment()
int
getMaxSettingsKeys()
java.util.List<java.lang.String>
getProtocols()
Scheduler
getScheduler()
int
getSelectors()
long
getStreamIdleTimeout()
boolean
isConnectBlocking()
boolean
isUseALPN()
boolean
isUseInputDirectByteBuffers()
boolean
isUseOutputDirectByteBuffers()
void
setBindAddress(java.net.SocketAddress bindAddress)
void
setByteBufferPool(ByteBufferPool bufferPool)
void
setConnectBlocking(boolean connectBlocking)
void
setConnectTimeout(long connectTimeout)
void
setExecutor(java.util.concurrent.Executor executor)
void
setFlowControlStrategyFactory(FlowControlStrategy.Factory flowControlStrategyFactory)
void
setIdleTimeout(long idleTimeout)
void
setInitialSessionRecvWindow(int initialSessionRecvWindow)
void
setInitialStreamRecvWindow(int initialStreamRecvWindow)
void
setInputBufferSize(int inputBufferSize)
void
setMaxConcurrentPushedStreams(int maxConcurrentPushedStreams)
void
setMaxDynamicTableSize(int maxDynamicTableSize)
void
setMaxFrameLength(int maxFrameLength)
void
setMaxHeaderBlockFragment(int maxHeaderBlockFragment)
void
setMaxSettingsKeys(int maxSettingsKeys)
void
setProtocols(java.util.List<java.lang.String> protocols)
void
setScheduler(Scheduler scheduler)
void
setSelectors(int selectors)
void
setStreamIdleTimeout(long streamIdleTimeout)
void
setUseALPN(boolean useALPN)
void
setUseInputDirectByteBuffers(boolean useInputDirectByteBuffers)
void
setUseOutputDirectByteBuffers(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, updateBeans
-
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toString
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.eclipse.jetty.util.component.Container
getCachedBeans, getEventListeners
-
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpable
-
-
-
-
Constructor Detail
-
HTTP2Client
public HTTP2Client()
-
HTTP2Client
public HTTP2Client(ClientConnector connector)
-
-
Method Detail
-
getClientConnector
public ClientConnector getClientConnector()
-
getExecutor
public java.util.concurrent.Executor getExecutor()
-
setExecutor
public void setExecutor(java.util.concurrent.Executor executor)
-
getScheduler
public Scheduler getScheduler()
-
setScheduler
public void setScheduler(Scheduler scheduler)
-
getByteBufferPool
public ByteBufferPool getByteBufferPool()
-
setByteBufferPool
public void setByteBufferPool(ByteBufferPool bufferPool)
-
getFlowControlStrategyFactory
public FlowControlStrategy.Factory getFlowControlStrategyFactory()
-
setFlowControlStrategyFactory
public void setFlowControlStrategyFactory(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
public java.net.SocketAddress getBindAddress()
-
setBindAddress
public void setBindAddress(java.net.SocketAddress bindAddress)
-
getInputBufferSize
@ManagedAttribute("The size of the buffer used to read from the network") public int getInputBufferSize()
-
setInputBufferSize
public void setInputBufferSize(int inputBufferSize)
-
getProtocols
@ManagedAttribute("The ALPN protocol list") public java.util.List<java.lang.String> getProtocols()
-
setProtocols
public void setProtocols(java.util.List<java.lang.String> protocols)
-
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
@ManagedAttribute("The max frame length in bytes") public int getMaxFrameLength()
-
setMaxFrameLength
public void setMaxFrameLength(int maxFrameLength)
-
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)
-
getMaxDynamicTableSize
@ManagedAttribute("The HPACK dynamic table maximum size") public int getMaxDynamicTableSize()
-
setMaxDynamicTableSize
public void setMaxDynamicTableSize(int maxDynamicTableSize)
-
getMaxHeaderBlockFragment
@ManagedAttribute("The max size of header block fragments") public int getMaxHeaderBlockFragment()
-
setMaxHeaderBlockFragment
public void setMaxHeaderBlockFragment(int maxHeaderBlockFragment)
-
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 java.util.concurrent.CompletableFuture<Session> connect(java.net.SocketAddress address, Session.Listener listener)
-
connect
public void connect(java.net.SocketAddress address, Session.Listener listener, Promise<Session> promise)
-
connect
public java.util.concurrent.CompletableFuture<Session> connect(SslContextFactory sslContextFactory, java.net.SocketAddress address, Session.Listener listener)
-
connect
public void connect(SslContextFactory sslContextFactory, java.net.SocketAddress address, Session.Listener listener, Promise<Session> promise)
-
connect
public void connect(SslContextFactory sslContextFactory, java.net.SocketAddress address, Session.Listener listener, Promise<Session> promise, java.util.Map<java.lang.String,java.lang.Object> context)
-
connect
public void connect(java.net.SocketAddress address, ClientConnectionFactory factory, Session.Listener listener, Promise<Session> promise, java.util.Map<java.lang.String,java.lang.Object> context)
-
accept
public void accept(SslContextFactory sslContextFactory, java.nio.channels.SocketChannel channel, Session.Listener listener, Promise<Session> promise)
-
accept
public void accept(java.nio.channels.SocketChannel channel, ClientConnectionFactory factory, Session.Listener listener, Promise<Session> promise)
-
-