Class 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.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();
     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();
     
    • Nested Class Summary

      • Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener
      • 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.LifeCycle

        org.eclipse.jetty.util.component.LifeCycle.Listener
    • Field Summary

      • Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        FAILED, RUNNING, STARTED, STARTING, STOPPED, STOPPING
      • Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

        KEY
    • Constructor Summary

      Constructors 
      Constructor Description
      HTTP2Client()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void accept​(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, java.nio.channels.SocketChannel channel, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise)  
      protected void configure​(java.nio.channels.SocketChannel channel)  
      void connect​(java.net.InetSocketAddress 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, java.net.InetSocketAddress 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, java.net.InetSocketAddress address, org.eclipse.jetty.http2.api.Session.Listener listener, org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise, java.util.Map<java.lang.String,​java.lang.Object> context)  
      protected void doStart()  
      java.net.SocketAddress getBindAddress()  
      org.eclipse.jetty.io.ByteBufferPool getByteBufferPool()  
      org.eclipse.jetty.io.ClientConnectionFactory getClientConnectionFactory()  
      long getConnectTimeout()  
      java.util.concurrent.Executor getExecutor()  
      org.eclipse.jetty.http2.FlowControlStrategy.Factory getFlowControlStrategyFactory()  
      long getIdleTimeout()  
      int getInitialSessionRecvWindow()  
      int getInitialStreamRecvWindow()  
      int getInputBufferSize()  
      int getMaxConcurrentPushedStreams()  
      int getMaxFrameLength()  
      int getMaxSettingsKeys()  
      java.util.List<java.lang.String> getProtocols()  
      org.eclipse.jetty.util.thread.Scheduler getScheduler()  
      int getSelectors()  
      boolean isConnectBlocking()  
      protected org.eclipse.jetty.io.SelectorManager newSelectorManager()  
      protected org.eclipse.jetty.io.ClientConnectionFactory newSslClientConnectionFactory​(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory, org.eclipse.jetty.io.ClientConnectionFactory connectionFactory)  
      void setBindAddress​(java.net.SocketAddress bindAddress)  
      void setByteBufferPool​(org.eclipse.jetty.io.ByteBufferPool bufferPool)  
      void setClientConnectionFactory​(org.eclipse.jetty.io.ClientConnectionFactory connectionFactory)  
      void setConnectBlocking​(boolean connectBlocking)  
      void setConnectTimeout​(long connectTimeout)  
      void setExecutor​(java.util.concurrent.Executor executor)  
      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 setMaxFrameLength​(int maxFrameLength)  
      void setMaxSettingsKeys​(int maxSettingsKeys)  
      void setProtocols​(java.util.List<java.lang.String> protocols)  
      void setScheduler​(org.eclipse.jetty.util.thread.Scheduler scheduler)  
      void setSelectors​(int selectors)  
      • Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle

        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
      • Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

        addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, 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.Dumpable

        dumpSelf
    • Constructor Detail

      • HTTP2Client

        public HTTP2Client()
    • Method Detail

      • doStart

        protected void doStart()
                        throws java.lang.Exception
        Overrides:
        doStart in class org.eclipse.jetty.util.component.ContainerLifeCycle
        Throws:
        java.lang.Exception
      • newSelectorManager

        protected org.eclipse.jetty.io.SelectorManager newSelectorManager()
      • newSslClientConnectionFactory

        protected org.eclipse.jetty.io.ClientConnectionFactory newSslClientConnectionFactory​(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory,
                                                                                             org.eclipse.jetty.io.ClientConnectionFactory connectionFactory)
      • getExecutor

        public java.util.concurrent.Executor getExecutor()
      • setExecutor

        public void setExecutor​(java.util.concurrent.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)
      • getClientConnectionFactory

        public org.eclipse.jetty.io.ClientConnectionFactory getClientConnectionFactory()
      • setClientConnectionFactory

        public void setClientConnectionFactory​(org.eclipse.jetty.io.ClientConnectionFactory connectionFactory)
      • 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)
      • 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)
      • connect

        public void connect​(java.net.InetSocketAddress 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,
                            java.net.InetSocketAddress 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,
                            java.net.InetSocketAddress address,
                            org.eclipse.jetty.http2.api.Session.Listener listener,
                            org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise,
                            java.util.Map<java.lang.String,​java.lang.Object> context)
      • accept

        public void accept​(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory,
                           java.nio.channels.SocketChannel channel,
                           org.eclipse.jetty.http2.api.Session.Listener listener,
                           org.eclipse.jetty.util.Promise<org.eclipse.jetty.http2.api.Session> promise)
      • configure

        protected void configure​(java.nio.channels.SocketChannel channel)
                          throws java.io.IOException
        Throws:
        java.io.IOException