4

App Engine 最近启用了套接字Google 向所有人开放了 Compute Engine,因此现在可以使用 SPDY 将 App Engine 应用程序连接到后端 Compute Engine 服务器。

但是 SPDY 库支持可能仍然存在问题,因为流行的 Java SPDY 客户端(如Square 的 okhttp)使用不在Google JRE 白名单上的java.util.concurrentConnectionPool

是否有 Google 员工推荐或已知可与 App Engine 一起使用的 Java SPDY 客户端库?

更新:我错了——这些java.util.concurrent课程在 Google JRE 白名单上。

我在白名单页面搜索“并发”,发现java.util.ConcurrentModificationException...

java.util.Collection
java.util.Collections
java.util.Comparator
java.util.ConcurrentModificationException
java.util.Currency
java.util.Date
java.util.Deque

...并且没有意识到页面下方还有一大堆java.util.concurrent课程。

感谢@jesse-wilson指出这一点:

https://github.com/square/okhttp/issues/195

Jesse 还表示,他刚刚与 App Engine 团队的 I/O 人员讨论了在 App Engine 上运行OkHttp的问题,App Engine 人员说:

更大的问题是 OkHttp 需要一些特殊的 SSL 类在 bootclasspath 上才能在 JVM 上运行。你永远不会在应用引擎上得到它(太危险),所以这使得 App Engine 上的 SPDY 成为任何库的非入门者。

此外,Jesse 说 SPDY 客户端OkHttp是一个内部 API,它会发生变化,因此它不打算用作独立客户端。

但是,这是后端 RPC 的 SPDY,因此要处理 GAE 上的 SSL 问题,您应该能够禁用 SSL 并将原始 SPDY 帧传递给 Compute Engine 服务器,因为 Compute Engine 会自动加密服务器之间的通信。

Ilya Grigorik ( @igrigorik ) 在他的 AirBnB TechTalk on SPDY 中讨论了禁用 SSL。最后,他提出了将 SPDY 用于现代后端 RPC 而不是 Thrift 等东西的案例。请参阅...

“构建现代 Web 堆栈”

所以我仍在寻找可以在 App Engine 上运行的 Java SPDY 客户端。这可能意味着分叉一个并剥离所有 SSL 内容,除非可以通过从构建中排除 SSL 类来使其工作。

任何指向良好 Java SPDY 客户端的指针都值得赞赏。

更新 2:SPDY 开发人员名单上的人说 Jetty 和 Netty 现在拥有独立的 SPDY 客户端库:

码头 SPDY 客户端:

;; Clojure dependencies
[org.eclipse.jetty.spdy/spdy-core "9.0.3.v20130506"]
[org.eclipse.jetty.spdy/spdy-client "9.0.3.v20130506"]

Netty SPDY 客户端:

;; Clojure dependency
[io.netty/netty-codec-http "4.0.0.CR3"]

还有 Twitter 的 Finagle SPDY 客户端,它基于 Netty:

Finagle 的 SPDY 客户端:

;; Clojure dependency
;; [com.twitter/finagle-spdy "6.4.0"]

Jetty 的 SPDY 客户端允许您通过 SSL 或明文运行它,因此这可能会绕过 App Engine 的 SSL 限制,并且由于 Jetty 是 App Engine 用于其 servlet 容器的,也许这可以得到官方的祝福或改编。

我向 App Engine 问题跟踪器添加了功能请求...

“将 SPDY 客户端添加到 SDK 以连接到计算引擎服务器” https://code.google.com/p/googleappengine/issues/detail?id=9398

4

0 回答 0