SSL / NPN将通过我们的负载均衡器(Haproxy)处理,因此我并不需要Jetty为我们这样做。
但我在网上看到的所有例子都只显示了如何使用SSL / NPN,而不是没有。
这是我到目前为止所做的尝试:
Server server = new Server();
HTTPConfiguration httpConfig = .... // set up some additional http config here
PushStrategey push = new ReferrerPushStrategy();
List<ConnectionFactory> factories = new ArrayList<>();
factories.add(new HTTPSPDYServerConnectionFactory(SPDY.V3, httpConfig, push));
factories.add(new HTTPSPDYServerConnectionFactory(SPDY.V2, httpConfig, push));
factories.add(new HTTPConnectionFactory(httpConfig));
ServerConnector connector = new ServerConnector(server, factories.toArray(new ConnectionFactory[factories.size()]));
connector.setPort(port);
server.addConnector(connector);
connector.start();
....
不幸的是,似乎出现了问题,当我尝试通过curl或浏览器等客户端访问服务器时,它们会无限期地挂起。我做错了什么?
由于
答案 0 :(得分:3)
当您将ServerConnector
配置为使用明文SPDY时,您的客户还必须说明文SPDY。
如果您使用curl
等客户端或浏览器,则他们不会说明文SPDY。客户端将发送一个不被理解的HTTP请求(服务器期望SPDY),这就是为什么您的连接&#34;挂起&#34;。
只有Chromium / Chrome有一种模式,您可以使用here所述的--use-spdy=no-ssl
参数使其说出明文SPDY。
因此,如果您使用明文SPDY,则配置多个ServerConnectionFactory
没有意义,因为无法根据正在协商的协议选择一个,因为没有协议协商。
协议协商仅在使用SSL + NPN时发生。
如果你真的想要设置明文SPDY ServerConnectionFactory
,那么你的代码基本上是正确的(除了不必要的多个ServerConnector
); this是Jetty SPDY测试套件中如何设置相同内容的示例。