java-8 - HTTP/2 Java 8、Jetty 和 ALPN

标签 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-boot在这里 https://mvnrepository.com/search?q=org.eclipse.jetty

无论我尝试哪种方式,我都无法向 HTTP/2 端点提交 POST 请求。

但是,使用 Netty 和以下依赖项,我的测试成功了:

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

在哪里可以找到文档来查看哪个版本的 ALPN boot 与 Oracle JDK 兼容? ALPN boot 是否仅与 OpenJDK 兼容?

我了解到 Java 9 将原生支持 ALPN。

顺便说一句,哪个更好?用于 HTTP/2 调用的 Netty 或 Jetty。

最佳答案

出于建立 Http/2 连接的多种原因,Netty 是首选。我发现使用它的几个优点是:

  • 无需将 ALPN jar 添加到启动类路径。添加 Maven 依赖项“netty-tcnative-boringssl-static”即可完成工作
  • 它本质上支持使用 API 的异步模型。因此,在 HTTP/2 的情况下,处理服务器推送的数据变得更简单

关于java-8 - HTTP/2 Java 8、Jetty 和 ALPN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39856972/

相关文章:

jetty - Jetty session cookie 上的 SameSite 标志

java - jetty:错误 500 需要完整的 JDK(不仅仅是 JRE)

java - Apache Camel : consume a rest service with jetty

netty - 代表连接到 netty 服务器的客户端

java - Netty + JMeter,重用连接时出错

java - Netty 4.0.19.Final 内存泄漏与 io.netty.channel.ChannelOutboundBuffer$Entry

java-8 - java 8 方法引用 : either `equals` or `equalsIgnoreCase`

Java List<Map<String, Long>> 映射键的分组总和

java - 使用 Collection.stream 按特定属性动态分组

java - 漏洞 : parameter 'initialCapacity' of ConcurrentHashMap's construct method?