App Engine recently enabled sockets和Google opened up Compute Engine to everyone因此现在可以使用SPDY将App Engine应用程序连接到后端计算引擎服务器。
但SPDY库支持可能仍然存在问题,因为Square's okhttp等热门Java SPDY客户使用的java.util.concurrent
classes for its ConnectionPool
不在Google JRE whitelist上。
是否存在Google员工推荐的或者已知可与App Engine配合使用的Java SPDY客户端库?
更新:我错了 - {J}白名单上有java.util.concurrent
个类。
我在白名单页面上搜索了“并发”,找到了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类 要在JVM上运行的bootclasspath。你永远不会那样做 应用程序引擎(太危险),以便在App Engine上制作SPDY 任何图书馆的非首发。
此外,Jesse表示OkHttp
中的SPDY客户端是一个内部API,它会发生变化,因此不打算用作独立客户端。
但是,对于后端RPC来说这是SPDY,因此要处理GAE上的SSL问题,您应该能够禁用SSL并将原始SPDY帧传递给计算引擎服务器,因为Compute Engine会自动加密服务器之间的通信。
Ilya Grigorik(@igrigorik)讨论了在SPDY上的AirBnB TechTalk中禁用SSL。最后,他提出了将SPDY用于现代后端RPC的情况,而不是Thrift等等。请参阅......
“构建现代Web堆栈”
所以我仍然在寻找可以在App Engine上运行的Java SPDY客户端。它可能意味着分叉并剥离所有SSL内容,除非可以通过从构建中排除SSL类来使其工作。
赞赏任何指向优秀Java SPDY客户端的指针。
更新2 :SPDY开发名单上的人说Jetty和Netty现在有独立的SPDY客户端库:
Jetty 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