All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.dropwizard.http2.Http2CConnectorFactory Maven / Gradle / Ivy

There is a newer version: 5.0.0-rc.3
Show newest version
package io.dropwizard.http2;

import com.codahale.metrics.MetricRegistry;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonTypeName;
import io.dropwizard.jetty.HttpConnectorFactory;
import io.dropwizard.jetty.HttpsConnectorFactory;
import io.dropwizard.jetty.Jetty93InstrumentedConnectionFactory;
import org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory;
import org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory;
import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.util.thread.ScheduledExecutorScheduler;
import org.eclipse.jetty.util.thread.ThreadPool;

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

/**
 * Builds HTTP/2 clear text (h2c) connectors.
 * 

* Configuration Parameters: *

* * * * * * * * * * * * * * * *
NameDefaultDescription
{@code maxConcurrentStreams}<1024 * The maximum number of concurrently open streams allowed on a single HTTP/2 connection. * Larger values increase parallelism, but cost a memory commitment. *
{@code initialStreamSendWindow}65535 * The initial flow control window size for a new stream. Larger values may allow greater throughput, * but also risk head of line blocking if TCP/IP flow control is triggered. *
*

* For more configuration parameters, see {@link HttpsConnectorFactory}. * @see HttpConnectorFactory */ @JsonTypeName("h2c") public class Http2CConnectorFactory extends HttpConnectorFactory { @Min(100) @Max(Integer.MAX_VALUE) private int maxConcurrentStreams = 1024; @Min(1) @Max(Integer.MAX_VALUE) private int initialStreamSendWindow = 65535; @JsonProperty public int getMaxConcurrentStreams() { return maxConcurrentStreams; } @JsonProperty public void setMaxConcurrentStreams(int maxConcurrentStreams) { this.maxConcurrentStreams = maxConcurrentStreams; } @JsonProperty public int getInitialStreamSendWindow() { return initialStreamSendWindow; } @JsonProperty public void setInitialStreamSendWindow(int initialStreamSendWindow) { this.initialStreamSendWindow = initialStreamSendWindow; } @Override public Connector build(Server server, MetricRegistry metrics, String name, ThreadPool threadPool) { // Prepare connection factories for HTTP/2c final HttpConfiguration httpConfig = buildHttpConfiguration(); final HttpConnectionFactory http11 = buildHttpConnectionFactory(httpConfig); final HTTP2ServerConnectionFactory http2c = new HTTP2CServerConnectionFactory(httpConfig); http2c.setMaxConcurrentStreams(maxConcurrentStreams); http2c.setInitialStreamSendWindow(initialStreamSendWindow); // The server connector should use HTTP/1.1 by default. It affords to the server to stay compatible // with old clients. New clients which want to use HTTP/2, however, will make an HTTP/1.1 OPTIONS // request with an Upgrade header with "h2c" value. The server supports HTTP/2 clear text connections, // so it will return the predefined HTTP/2 preamble and the client and the server will switch to the // new protocol. return buildConnector(server, new ScheduledExecutorScheduler(), buildBufferPool(), name, threadPool, new Jetty93InstrumentedConnectionFactory(http11, metrics.timer(httpConnections())), http2c); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy