0

在迁移到Play 2.5时,我试图按照here所述实现新的WebSocket功能处理与演员的WebSockets)。在Play 2.5.4中没有play.libs.streams.ActorFlow(如示例所示),但只有play.api.libs.streams.ActorFlow。但是,当我写这篇文章的代码:播放2.5 ActorFlow:无法从Flow <String,String,capture#1 of?>转换为Flow <String,String,?>

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 
       ) 
     ); 
    } 
} 

编译器给我一个错误:

Type mismatch: cannot convert from Flow <String,String,capture#1-of ?> to Flow<String,String,?>

是否有人可以解释我如何实现在2.5这一做法?为什么我得到这个错误?

回答

0

我刚刚在Play 2.5.12中遇到同样的问题。问题似乎是Actor 2.5在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

现在,我想简单的解决方案是坚持(depricated)LegacyWebsocket,直到2.6.x稳定。

(我知道这是一个古老的问题,但它仍然相关)。

+0

感谢您的回应:)但是,我发现在Play 2.5中使用新的WebSocket实现的方式基于这里写的内容:http://nuah.livejournal.com/315561.html – sleb82

相关问题