我会说喷雾是你最好的选择。但是,它不能与 Java 一起使用。我们正在使用 play2-mini 框架,但存在一些问题。目前尚不清楚如何使用 Java 将其连接到 Akka,相比之下,Spray 完全围绕这一概念构建 - 当请求进入时,您会收到一个请求消息给参与者。
使用 Play,您必须滚动自己的连接:即,在静态(角色眼睛)请求方法中:
Timeout timeout = new Timeout(Duration.parse("20 seconds"));
Future<Object> future = Patterns.ask(myActor, new ClientMessage(null), timeout);
Promise<Object> sdf = Akka.asPromise(future);
Promise<Result> r2 = sdf.map(new Function<Object, Result>() {
@Override
public Result apply(Object a) throws Throwable {
val wsrm = (MyMessage)a;
return ok((wsrm).val); // String value from message object
}
});
Result test2 = async(r2);
return test2;
哪个效果很好。Play 在它的系统中也使用了 AKKA 事件,所以你也可以使用它的 actor 上下文来创建你的 actor。
遗憾的是,目前 Play2-mini 根本不是 mini,它依赖于整个 Play 框架,这也带来了更多的问题。显然,他们正在开发一个简单的版本,AFAIK 将涉及将 Play 拆分为它的模块,我认为这种情况不会很快发生。
IMO,喷雾是一个更好的选择。它的流畅性更适合AKKA,但不幸的是我必须在这里使用 Java,所以我不能使用它:
https ://github.com/spray/spray/issues/96
关于您的 http 客户端/服务问题 - AKKA 本身没有任何 HTTP 功能,因此您需要与 HTTP 服务器接口,在这种情况下播放。您可以使用异步请求来保持连接处于活动状态,而您的 Actor 系统将消息异步传递给您的 http 客户端 Actor 以异步获取 http 响应,将消息发送回 Web 服务层,然后返回播放。
希望这能消除一些困惑。在进行了几天的研究之前,我也很困惑;)如果还有什么我可以帮助解决的问题,请告诉我-为了社区的利益!;)
Spray can 有一个异步 http 客户端,但对于我们这些困在 Java 领域的人来说,还有:https ://github.com/sonatype/async-http-client ,您可能可以将其与 AKKA 一起使用。