2

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 或我的浏览器等客户端访问服务器时,它们会无限期地挂起。我究竟做错了什么?

谢谢

4

1 回答 1

3

当您将 a 配置ServerConnector为说明文 SPDY 时,您的客户端也必须说明文 SPDY。

如果您使用客户端curl或浏览器,他们不会说明文 SPDY。客户端将发送一个无法理解的 HTTP 请求(服务器需要 SPDY),这就是您的连接“挂起”的原因。

只有 Chromium/Chrome 有一种模式,您可以使用此处--use-spdy=no-ssl描述的参数使其说出明文 SPDY 。

因此,如果您使用明文 SPDY,则配置多个没有意义,ServerConnectionFactory因为无法根据正在协商的协议选择一个,因为没有协议协商。

协议协商仅在使用 SSL+NPN 时发生。

ServerConnectionFactory如果您真的想设置明文 SPDY ,您的代码基本上是正确的(除了不必要的 multi ) ServerConnector是如何在Jetty SPDY 测试套件中设置相同的示例。

最后,另请参阅有关 SPDY 的参考文档

于 2014-03-15T11:11:52.140 回答