将 SPDY 与 Netty 一起使用

Posted

技术标签:

【中文标题】将 SPDY 与 Netty 一起使用【英文标题】:Using SPDY with Netty 【发布时间】:2012-04-22 05:09:53 【问题描述】:

我已经在我的 Apache 服务器上设置了 MOD_SPDY,现在想要改进我的客户端代码以使用 Netty 的 SPDY 实现通过 SPDY 通道将我的请求发送到服务器。

这是我第一次使用 Netty,所以我认为我需要以某种方式配置我的 Channel,然后通过它发送请求。问题是,如何配置通道,甚至在此之后,如何跟踪通道内可能同时执行的多个 HTTP 请求,似乎并不十分清楚。

我搜索了一下,发现了 SPDY 包: http://netty.io/docs/stable/api/org/jboss/netty/handler/codec/spdy/package-summary.html

但是那里的文档仍然很薄。我似乎没有找到任何使用该代码的示例,只发现它存在于最新版本中。

有人有关于如何构建 SPDY 通道然后通过它发送/跟踪多个请求和响应的示例吗?另外,当服务器不支持 SPDY 并且通道回退到标准 SSL 连接时,此功能将如何发挥作用?

【问题讨论】:

如果你没有绑定 Netty,也许你可以试试 Jetty 的 SPDY,见 webtide.intalio.com/2012/03/spdy-support-in-jetty 和 smartjava.org/content/how-use-spdy-jetty。 @svordet Bill 已经有一个服务器,他需要一个客户端。 其实看起来sbordet是对的; Jetty 还有一个可能更容易使用的 SPDY 客户端:wiki.eclipse.org/Jetty/Feature/… 【参考方案1】:

我可以在 Netty 和 SPDY 上找到的唯一示例是 SessionHandler 和 socket echo test。我还没有让这个东西运行,但是你的客户端应该创建由SpdyFrameCodecSpdySessionHandler 和你的处理程序组成的管道。

您的处理程序应该在会话测试中以EchoHandler 为模型,因为这样SpdySessionHandler 可以将原始帧解码为更有意义的帧,并按照 SPDY 协议的要求执行一些操作。

至于备用,Netty 的快照版本中有SpdyHttpCodec,它从 SPDY 转换为 HTTP。这样,您可以根据 HTTP 构建客户端处理程序,并透明地接收通过 SPDY 或 HTTP 传入的消息。为此,需要实现类似于 port unification 例子。

说了这么多。很少有实用程序类/处理程序可以使所有这些成为“开箱即用”的体验。我想制作一个可行的示例,但现在没有时间,而且代码太多,无法简单地将其粘贴在这里作为答案。

【讨论】:

啊,所以我只是从工厂请求多个通道,并且在引擎盖下 SPDY 处理程序将多路复用它们?我应该按什么顺序添加处理程序? 不幸的是,它不是那么简单,但可以使用提供的类来实现。我对自己完成这项工作很感兴趣,所以我稍后会尝试构建工作代码。【参考方案2】:

使用 spdy 和 jetty 的例子并不多。我通常不是无耻推广的人,但我只是写了一个完整的例子,告诉你如何做你想做的事。我已将 netty 配置为在客户端支持时为 spdy 提供服务,并在 spdy 不可用时回退到 http。您可以在以下位置找到代码:http://www.smartjava.org/content/using-spdy-and-http-transparently-using-netty

【讨论】:

感谢您的回答,但我正在寻找相反的结果。我想要一个 HTTP Client,它会在可用时使用 SPDY,但会回退到常规 HTTP。 啊,这样。然后你仍然可以使用几乎相同的方法和一组处理程序。但不要使用 ServerBootstrap,而是使用 ClientBootstrap

以上是关于将 SPDY 与 Netty 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用 netty 客户端与 spdy 服务器对话

我可以将 SPDY 与 Unicorn 一起使用吗?

将 spdy 与 mod_php 一起使用

java中使用netty的SPDY客户端和服务器

在 Android 上添加 spdy 编解码器后使用 netty 连接失败

如何使我的 Web 应用程序与 SPDY、Jetty 一起工作 [关闭]