App Engine 最近启用了套接字,Google 向所有人开放了 Compute Engine,因此现在可以使用 SPDY 将 App Engine 应用程序连接到后端 Compute Engine 服务器。
但是 SPDY 库支持可能仍然存在问题,因为流行的 Java SPDY 客户端(如Square 的 okhttp)使用不在Google JRE 白名单上的java.util.concurrent
类ConnectionPool
。
是否有 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 堆栈”
- 视频:https ://www.youtube.com/watch?v=ZxfEcqJ4MOM
- 幻灯片:http ://www.igvita.com/slides/2012/http2-for-fun-and-profit.pdf
- 博客:http ://www.igvita.com/2012/01/18/building-a-modern-web-stack-for-the-realtime-web/
所以我仍在寻找可以在 App Engine 上运行的 Java SPDY 客户端。这可能意味着分叉一个并剥离所有 SSL 内容,除非可以通过从构建中排除 SSL 类来使其工作。
任何指向良好 Java SPDY 客户端的指针都值得赞赏。
更新 2:SPDY 开发人员名单上的人说 Jetty 和 Netty 现在拥有独立的 SPDY 客户端库:
码头 SPDY 客户端:
- http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/tree/jetty-spdy
- http://wiki.eclipse.org/Jetty/Feature/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 客户端:
- http://netty.io/wiki/new-and-noteworthy.html (codec-http)
- https://github.com/netty/netty/tree/master/codec-http/src/main/java/io/netty/handler/codec/spdy
;; Clojure dependency
[io.netty/netty-codec-http "4.0.0.CR3"]
还有 Twitter 的 Finagle SPDY 客户端,它基于 Netty:
Finagle 的 SPDY 客户端:
- http://twitter.github.io/finagle/guide/index.html
- https://github.com/twitter/finagle/tree/master/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