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.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();
     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.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, RUNNING, STARTED, STARTING, STOPPED, STOPPING
      • Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

        KEY
    • Constructor Summary

      Constructors 
      Constructor Description
      HTTP2Client()  
    • 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)
      • 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)
      • 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)
      • isTCPNoDelay

        public boolean isTCPNoDelay()
      • setTCPNoDelay

        public void setTCPNoDelay​(boolean tcpNoDelay)
      • 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)
      • connect

        public void connect​(java.net.InetSocketAddress address,
                            Session.Listener listener,
                            org.eclipse.jetty.util.Promise<Session> promise)
      • connect

        public void connect​(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory,
                            java.net.InetSocketAddress address,
                            Session.Listener listener,
                            org.eclipse.jetty.util.Promise<Session> promise)
      • connect

        public void connect​(org.eclipse.jetty.util.ssl.SslContextFactory sslContextFactory,
                            java.net.InetSocketAddress address,
                            Session.Listener listener,
                            org.eclipse.jetty.util.Promise<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,
                           Session.Listener listener,
                           org.eclipse.jetty.util.Promise<Session> promise)
      • configure

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