@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(); SslContextFactory sslContextFactory = new SslContextFactory(); client.addBean(sslContextFactory); client.start(); // 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", new HttpURI("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.Adapter.INSTANCE); // When done, stop the client. client.stop();
Modifier and Type | Class and Description |
---|---|
private class |
HTTP2Client.ClientSelectorManager |
AbstractLifeCycle.AbstractLifeCycleListener
Container.InheritedListener, Container.Listener
LifeCycle.Listener
Modifier and Type | Field and Description |
---|---|
private java.net.SocketAddress |
bindAddress |
private ByteBufferPool |
bufferPool |
private boolean |
connectBlocking |
private ClientConnectionFactory |
connectionFactory |
private long |
connectTimeout |
private java.util.concurrent.Executor |
executor |
private FlowControlStrategy.Factory |
flowControlStrategyFactory |
private long |
idleTimeout |
private int |
initialSessionRecvWindow |
private int |
initialStreamRecvWindow |
private int |
inputBufferSize |
private int |
maxConcurrentPushedStreams |
private int |
maxFrameLength |
private int |
maxSettingsKeys |
private java.util.List<java.lang.String> |
protocols |
private Scheduler |
scheduler |
private SelectorManager |
selector |
private int |
selectors |
Constructor and Description |
---|
HTTP2Client() |
Modifier and Type | Method and Description |
---|---|
void |
accept(SslContextFactory sslContextFactory,
java.nio.channels.SocketChannel channel,
Session.Listener listener,
Promise<Session> promise) |
protected void |
configure(java.nio.channels.SocketChannel channel) |
void |
connect(java.net.InetSocketAddress address,
Session.Listener listener,
Promise<Session> promise) |
void |
connect(SslContextFactory sslContextFactory,
java.net.InetSocketAddress address,
Session.Listener listener,
Promise<Session> promise) |
void |
connect(SslContextFactory sslContextFactory,
java.net.InetSocketAddress address,
Session.Listener listener,
Promise<Session> promise,
java.util.Map<java.lang.String,java.lang.Object> context) |
private java.util.Map<java.lang.String,java.lang.Object> |
contextFrom(SslContextFactory sslContextFactory,
java.net.InetSocketAddress address,
Session.Listener listener,
Promise<Session> promise,
java.util.Map<java.lang.String,java.lang.Object> context) |
protected void |
doStart()
Starts the managed lifecycle beans in the order they were added.
|
java.net.SocketAddress |
getBindAddress() |
ByteBufferPool |
getByteBufferPool() |
ClientConnectionFactory |
getClientConnectionFactory() |
long |
getConnectTimeout() |
java.util.concurrent.Executor |
getExecutor() |
FlowControlStrategy.Factory |
getFlowControlStrategyFactory() |
long |
getIdleTimeout() |
int |
getInitialSessionRecvWindow() |
int |
getInitialStreamRecvWindow() |
int |
getInputBufferSize() |
int |
getMaxConcurrentPushedStreams() |
int |
getMaxFrameLength() |
int |
getMaxSettingsKeys() |
java.util.List<java.lang.String> |
getProtocols() |
Scheduler |
getScheduler() |
int |
getSelectors() |
boolean |
isConnectBlocking() |
protected SelectorManager |
newSelectorManager() |
protected ClientConnectionFactory |
newSslClientConnectionFactory(SslContextFactory sslContextFactory,
ClientConnectionFactory connectionFactory) |
void |
setBindAddress(java.net.SocketAddress bindAddress) |
void |
setByteBufferPool(ByteBufferPool bufferPool) |
void |
setClientConnectionFactory(ClientConnectionFactory connectionFactory) |
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 |
setMaxFrameLength(int maxFrameLength) |
void |
setMaxSettingsKeys(int maxSettingsKeys) |
void |
setProtocols(java.util.List<java.lang.String> protocols) |
void |
setScheduler(Scheduler scheduler) |
void |
setSelectors(int selectors) |
addBean, addBean, addBean, addEventListener, addManaged, contains, destroy, doStop, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
dumpObjects, dumpSelf
private java.util.concurrent.Executor executor
private Scheduler scheduler
private ByteBufferPool bufferPool
private ClientConnectionFactory connectionFactory
private SelectorManager selector
private int selectors
private long idleTimeout
private long connectTimeout
private boolean connectBlocking
private java.net.SocketAddress bindAddress
private int inputBufferSize
private java.util.List<java.lang.String> protocols
private int initialSessionRecvWindow
private int initialStreamRecvWindow
private int maxFrameLength
private int maxConcurrentPushedStreams
private int maxSettingsKeys
private FlowControlStrategy.Factory flowControlStrategyFactory
protected void doStart() throws java.lang.Exception
ContainerLifeCycle
doStart
in class ContainerLifeCycle
java.lang.Exception
protected SelectorManager newSelectorManager()
protected ClientConnectionFactory newSslClientConnectionFactory(SslContextFactory sslContextFactory, ClientConnectionFactory connectionFactory)
public java.util.concurrent.Executor getExecutor()
public void setExecutor(java.util.concurrent.Executor executor)
public Scheduler getScheduler()
public void setScheduler(Scheduler scheduler)
public ByteBufferPool getByteBufferPool()
public void setByteBufferPool(ByteBufferPool bufferPool)
public ClientConnectionFactory getClientConnectionFactory()
public void setClientConnectionFactory(ClientConnectionFactory connectionFactory)
public FlowControlStrategy.Factory getFlowControlStrategyFactory()
public void setFlowControlStrategyFactory(FlowControlStrategy.Factory flowControlStrategyFactory)
@ManagedAttribute(value="The number of selectors") public int getSelectors()
public void setSelectors(int selectors)
@ManagedAttribute(value="The idle timeout in milliseconds") public long getIdleTimeout()
public void setIdleTimeout(long idleTimeout)
@ManagedAttribute(value="The connect timeout in milliseconds") public long getConnectTimeout()
public void setConnectTimeout(long connectTimeout)
@ManagedAttribute(value="Whether the connect() operation is blocking") public boolean isConnectBlocking()
public void setConnectBlocking(boolean connectBlocking)
public java.net.SocketAddress getBindAddress()
public void setBindAddress(java.net.SocketAddress bindAddress)
@ManagedAttribute(value="The size of the buffer used to read from the network") public int getInputBufferSize()
public void setInputBufferSize(int inputBufferSize)
@ManagedAttribute(value="The ALPN protocol list") public java.util.List<java.lang.String> getProtocols()
public void setProtocols(java.util.List<java.lang.String> protocols)
@ManagedAttribute(value="The initial size of session\'s flow control receive window") public int getInitialSessionRecvWindow()
public void setInitialSessionRecvWindow(int initialSessionRecvWindow)
@ManagedAttribute(value="The initial size of stream\'s flow control receive window") public int getInitialStreamRecvWindow()
public void setInitialStreamRecvWindow(int initialStreamRecvWindow)
@ManagedAttribute(value="The max frame length in bytes") public int getMaxFrameLength()
public void setMaxFrameLength(int maxFrameLength)
@ManagedAttribute(value="The max number of concurrent pushed streams") public int getMaxConcurrentPushedStreams()
public void setMaxConcurrentPushedStreams(int maxConcurrentPushedStreams)
@ManagedAttribute(value="The max number of keys in all SETTINGS frames") public int getMaxSettingsKeys()
public void setMaxSettingsKeys(int maxSettingsKeys)
public void connect(java.net.InetSocketAddress address, Session.Listener listener, Promise<Session> promise)
public void connect(SslContextFactory sslContextFactory, java.net.InetSocketAddress address, Session.Listener listener, Promise<Session> promise)
public void connect(SslContextFactory sslContextFactory, java.net.InetSocketAddress address, Session.Listener listener, Promise<Session> promise, java.util.Map<java.lang.String,java.lang.Object> context)
public void accept(SslContextFactory sslContextFactory, java.nio.channels.SocketChannel channel, Session.Listener listener, Promise<Session> promise)
private java.util.Map<java.lang.String,java.lang.Object> contextFrom(SslContextFactory sslContextFactory, java.net.InetSocketAddress address, Session.Listener listener, Promise<Session> promise, java.util.Map<java.lang.String,java.lang.Object> context)
protected void configure(java.nio.channels.SocketChannel channel) throws java.io.IOException
java.io.IOException