在迁移到Play 2.5时,我试图实现新的WebSocket功能,如here所述(使用actor处理WebSockets)。在Play 2.5.4中,没有play.libs.streams.ActorFlow(如示例所示),但只有play.api.libs.streams.ActorFlow。但是当我写这段代码时:
public class MyController extends Controller {
private final ActorSystem actorSystem;
private final Materializer materializer;
@Inject
public MyController(ActorSystem actorSystem, Materializer materializer) {
this.actorSystem = actorSystem;
this.materializer = materializer;
}
public WebSocket socket() {
return WebSocket.Text.accept(request ->
return ActorFlow.<String, String>actorRef(MyWebSocketActor::props, 256, OverflowStrategy.dropHead(),
actorSystem, materializer
)
);
}
}
编译器给出了一个错误:
类型不匹配:无法从Flow
转换<String,String,capture#1-of ?> to Flow<String,String,?>
有人可以解释一下如何在2.5中实现这种方法吗?为什么我会犯这个错误?
答案 0 :(得分:0)
我在Play 2.5.12中遇到了同样的问题。问题似乎是PlayFlow尚未在Play 2.5.x中为Java正确实现。 (这正是你从Scala那边得到play.api.libs.streams.ActorFlow的原因。)
适当的Java代码似乎适用于Play 2.6.x. https://github.com/playframework/playframework/blob/master/framework/src/play-streams/src/main/java/play/libs/streams/ActorFlow.java
目前,我想简单的解决方案是坚持使用(已删除的)LegacyWebsocket,直到2.6.x稳定。
(我知道这是一个古老的问题,但它仍然相关)。