HTTP / 2 Java 8,Jetty和ALPN

时间:2016-10-04 16:03:14

标签: java-8 jetty netty http2 alpn

我通过这个页面:https://www.eclipse.org/jetty/documentation/9.3.x/alpn-chapter.html在我的类路径中有一个ALPN引导jar但仍然无法使其工作。

我很困惑知道我是否需要Open SDK Java 8而不是Oracle Java 8.

我的Java版本是:

java -version
java version "1.8.0_11"
Java(TM) SE Runtime Environment (build 1.8.0_11-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.11-b03, mixed mode)

我正在使用以下版本的Jetty和ALPN启动:

<jetty-version>9.4.0.M1</jetty-version>
<alpn-version>8.1.9.v20160720</alpn-version>    
<dependency>
        <groupId>org.mortbay.jetty.alpn</groupId>
        <artifactId>alpn-boot</artifactId>
        <version>${alpn-version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-client</artifactId>
    <version>${jetty-version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.http2</groupId>
    <artifactId>http2-client</artifactId>
    <version>${jetty-version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.http2</groupId>
    <artifactId>http2-http-client-transport</artifactId>
    <version>${jetty-version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.http2</groupId>
    <artifactId>http2-common</artifactId>
    <version>${jetty-version}</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty.http2</groupId>
    <artifactId>http2-hpack</artifactId>
    <version>${jetty-version}</version>
</dependency>

此外,我尝试使用不同版本的Jetty和ALPN,我在此处https://mvnrepository.com/artifact/org.mortbay.jetty.alpn/alpn-boothttps://mvnrepository.com/search?q=org.eclipse.jetty

无论我尝试哪种方式,我都无法将其提交给HTTP / 2端点。

然而,对于Netty和以下依赖项,我的测试成功了:

<dependency>
           <groupId>io.netty</groupId>
           <artifactId>netty-tcnative-boringssl-static</artifactId>
           <version>1.1.33.Fork22</version>
       </dependency>

在哪里可以找到文档,了解哪个版本的ALPN启动与Oracle JDK兼容? ALPN启动只与OpenJDK兼容吗?

我读到,启动Java 9对ALPN的支持将是原生的。

另一方面,哪一个更好?用于HTTP / 2呼叫的Netty或Jetty。

2 个答案:

答案 0 :(得分:3)

Jetty的ALPN启动jar适用于OpenJDK和Oracle的JDK(基于OpenJDK)。

Jetty的ALPN引导jar必须位于 boot 类路径中,而不是常规类路径,就像您链接的文档所示。

因此,您不能将它声明为pom.xml文件中的依赖项(没有必要,就像您不需要指定对JDK类的依赖项一样。)

JDK 9将支持原生ALPN,已经有一些工作朝这个方向发展。

答案 1 :(得分:3)

Netty是首选,因为有几个原因可以建立Http / 2连接。我见过的几个优点是:

  • 不需要将ALPN jar添加到引导类路径中。添加maven依赖“netty-tcnative-boringssl-static”完成工作
  • 它本身支持使用API​​的异步模型。因此,在HTTP / 2
  • 的情况下,它可以更简单地处理服务器推送的数据