当前位置: 首页 > 面试题库 >

如何使用ALPN在SPDY上运行Jetty?

微生智刚
2023-03-14
问题内容

我回到了带有Jetty和SPDY的JDK8,并且看到现在Jetty9.2支持ALPN协议而不是NPN(请参阅我的问题如何在JDK8上使用SPDY运行Jetty?)。所以我设置了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 version "1.8.0_05"和码头9.2.2.v20140723。

我从JDK 1.7和alpn-boot-7.0.0.v20140317.jarWinXP
遇到的相同错误,如果从-Xbootclasspath/p:c:/jars/npn-boot/npn-boot-1.1.7.v20140316.jar

执行在我的代码中指向:

SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory);

似乎即使使用ALPN码头,也需要npn-boot中的类。是错误还是我做错了什么?


问题答案:

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

为了在SPDY中使用ALPN,您必须以ServerConnector这种方式配置a :

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用作服务器并将Webapp部署到该服务器,则Jetty已经根据激活的模块正确配置了ALPN或NPN。



 类似资料:
  • 我回到了JDK8和Jetty和SPDY,我看到现在Jetty 9.2支持ALPN协议而不是NPN协议(参见我的问题,如何在JDK8上运行Jetty和SPDY?)。所以我设置了: 但现在我有个例外: 我使用和jetty 9.2.2.v20140723。

  • 问题内容: 几天来,我们有了JDK8。我试图用SPDY服务器运行Jetty。在JDK8中,没有NPN支持,因此其结尾为: 我已经npn-boot-1.1.6.v20130911.jar在可与最新JDK7一起使用的CLASSPATH上运行它。 关于如何在JDK8上使用SPDY运行Jetty有任何解决方法? 问题答案: 与以前的Java版本一样,Java 11中没有Public JRE。不要与jre以

  • 我正在尝试使用QT的NFC模块读取我的Android手机上的NFC标签。 根据这一页面,Qt将从5.6版本开始在Android上支持NFC。这个版本还没有发布,所以我按照本页上的说明,从源代码处构建了它,并将它安装在Qt Creator中。 我一定是错过了什么... 更新1 似乎需要修改AndroidManifest.xml文件。我尝试了不同的方法,但似乎都没有产生预期的效果。只有当清单定义如下所

  • 问题内容: 我已经看到了一些关于在Azure上运行Redis的人的参考,但是没有实现或任何形式的“方法”。有人看过这样的例子吗? 问题答案: 下载适用于Windows的Redis-请参阅https://github.com/ServiceStack/ServiceStack.Redis上的“ Redis Service builds for Windows”部分。我最终使用了dmajkic的win

  • 我以ServletContainer的身份从Tomcat切换到Jetty,并尝试使用Jetty的所有默认设置启用SPDY。以下是启用SPDY的步骤: > 我下载并解压缩Jetty 我在webapps中复制了一个。war文件和一些只针对项目的部署描述符。 (现在是棘手的部分)我通过执行以下命令来启用SPDY: java-jar start.jar--add-to-startd=spdy 我接受不受信

  • 问题内容: 在互联网上其他任何地方都找不到有效的答案后,我将提交此“自问自答”教程 如何从脚本上运行一个简单的进程?我的代码在本地计算机上运行良好,但是尝试在Lambda上运行时遇到了其他问题。 问题答案: 这是一个简单过程的完整代码示例,以形式启动 。 它也可以在github上找到。 index.js phantom-script.js 要获取可与Amazon Linux机器一起使用的Phant