gpt4 book ai didi

java - 如何使用 ALPN 通过 SPDY 运行 Jetty?

转载 作者:行者123 更新时间:2023-11-30 07:07:14 25 4
gpt4 key购买 nike

我已经回到带有 Jetty 和 SPDY 的 JDK8,我看到现在 Jetty 9.2 支持 ALPN 协议(protocol)而不是 NPN(参见我的问题 How to run Jetty with SPDY on JDK8?)。所以我设置了bootclasspath:

java -Xbootclasspath/p:c:/jars/alpn-boot/alpn-boot-8.0.0.v2014031 ...

但现在我得到了异常:

Exception in thread "xyz.server" java.lang.NoClassDefFoundError:
org/eclipse/jetty/npn/NextProtoNego$ServerProvider
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
...
at java.lang.ClassLoader.loadClass(Unknown Source)
at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:63)
at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:53)
at org.eclipse.jetty.spdy.server.http.HTTPSPDYServerConnector.<init>(HTTPSPDYServerConnector.java:43)
at xyz.my.my_httpsrv_jetty.startHTTPSServer(my_httpsrv_jetty.java:359)
...

我使用 java 版本“1.8.0_05” 和 jetty 9.2.2.v20140723。

我在 WinXP 上使用 JDK 1.7 和 alpn-boot-7.0.0.v20140317.jar 时遇到了同样的错误,如果从 -Xbootclasspath/p:c:/jars/npn-boot/npn-boot-1.1.7.v20140316.jar

我的代码中的这个异常指向:

SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory);

似乎即使使用 ALPN jetty 也需要来自 npn-boot 的类。是错误还是我做错了什么?

最佳答案

HTTPSPDYServerConnector 未更新为 ALPN,目前对 NPN 的使用进行了硬编码。

为了将 ALPN 与 SPDY 一起使用,您必须以这种方式配置 ServerConnector:

SslContextFactory sslContextFactory = new SslContextFactory();
HttpConfiguration httpConfig = new HttpConfiguration();

SslConnectionFactory ssl = new SslConnectionFactory(sslContextFactory, "alpn");
ALPNServerConnectionFactory alpn = new ALPNServerConnectionFactory("spdy/3", "http/1.1");
alpn.setDefaultProtocol("http/1.1");
HTTPSPDYServerConnectionFactory spdy = new HTTPSPDYServerConnectionFactory(SPDY.V3, httpConfig);
HttpConnectionFactory http = new HttpConnectionFactory(httpConfig);

Server server = new Server();
ServerConnector connector = new ServerConnector(server, new ConnectionFactory[]{ssl, alpn, spdy, http});

server.start();

我将其跟踪为 https://bugs.eclipse.org/bugs/show_bug.cgi?id=440756 .

最后,如果您不直接使用代码,而是使用 Jetty 作为服务器并向其部署 Web 应用程序,Jetty 已经根据激活的模块正确配置了 ALPN 或 NPN。

关于java - 如何使用 ALPN 通过 SPDY 运行 Jetty?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25035063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com