如何使用ALPN在SPDY上运行Jetty? [英] How to run Jetty with SPDY using ALPN?

查看:190
本文介绍了如何使用ALPN在SPDY上运行Jetty?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Jetty和SPDY返回JDK8,我发现现在Jetty 9.2支持ALPN协议而不是NPN(请参阅我的问题

I have returned to JDK8 with Jetty and SPDY and I see that now Jetty 9.2 supports ALPN protocol instead of NPN (see my question How to run Jetty with SPDY on JDK8?). So I set 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.

I use java version "1.8.0_05" and 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

The same error I got with JDK 1.7 and alpn-boot-7.0.0.v20140317.jar on WinXP where I changed if from -Xbootclasspath/p:c:/jars/npn-boot/npn-boot-1.1.7.v20140316.jar

此执行将我的代码指向:

This execption points in my code into:

SSLconnector = new HTTPSPDYServerConnector(server, sslContextFactory);

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

It seems that even with ALPN jetty needs classes from npn-boot. Is it a bug or I have done something wrong?

推荐答案

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

HTTPSPDYServerConnector was not updated to ALPN and currently hardcodes usage of NPN.

要在SPDY上使用ALPN,您必须配置ServerConnector来代替:

In order to use ALPN with SPDY you have to configure a ServerConnector instead in this way:

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.

Finally, if you don't use the code directly, but use Jetty as a server and deploy webapps to it, Jetty already configures properly either ALPN or NPN depending on the modules that are activated.

这篇关于如何使用ALPN在SPDY上运行Jetty?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆