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.StopException

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container

    org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable

    org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    Nested 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, STOPPING

    Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

    KEY
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    HTTP2Client(org.eclipse.jetty.io.ClientConnector connector)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    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)
     
    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)
     
    CompletableFuture<org.eclipse.jetty.http2.api.Session>
    connect(SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener)
     
    void
    connect(SocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise)
     
    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)
     
    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)
     
    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)
     
    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)
     
     
    org.eclipse.jetty.io.ByteBufferPool
     
    org.eclipse.jetty.io.ClientConnector
     
    long
     
     
    org.eclipse.jetty.http2.FlowControlStrategy.Factory
     
    long
     
    int
     
    int
     
    int
     
    int
     
    int
     
    int
     
    int
     
    int
     
     
    org.eclipse.jetty.util.thread.Scheduler
     
    int
     
    long
     
    boolean
     
    boolean
     
    boolean
     
    boolean
     
    void
     
    void
    setByteBufferPool(org.eclipse.jetty.io.ByteBufferPool bufferPool)
     
    void
    setConnectBlocking(boolean connectBlocking)
     
    void
    setConnectTimeout(long connectTimeout)
     
    void
     
    void
    setFlowControlStrategyFactory(org.eclipse.jetty.http2.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(List<String> protocols)
     
    void
    setScheduler(org.eclipse.jetty.util.thread.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

    dumpSelf

    Methods 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

      public Executor getExecutor()
    • setExecutor

      public void setExecutor(Executor executor)
    • 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

      public SocketAddress getBindAddress()
    • setBindAddress

      public void setBindAddress(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 List<String> getProtocols()
    • setProtocols

      public void setProtocols(List<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 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)