播放框架用java中的actor处理websockets
Posted
技术标签:
【中文标题】播放框架用java中的actor处理websockets【英文标题】:Play framework Handling websockets with actors in java 【发布时间】:2018-07-27 19:55:10 【问题描述】:我正在尝试用 java 中的演员实现 websocket。我们接受websocket连接并创建一个ActorFlow.actorRef来处理websockets的地方,有没有什么方法可以将参数传递给websocket actor?我从这里的文档中关注这个例子.. https://www.playframework.com/documentation/2.6.x/JavaWebSockets#handling-websockets-with-actors
public WebSocket socket()
return WebSocket.Text.accept(request ->
ActorFlow.actorRef(MyWebSocketActor::props, actorSystem,
materializer));
有没有办法将参数传递给 MyWebSocketActor?
【问题讨论】:
【参考方案1】:除了按照@Igmar 的建议实现 Props 功能,
来自其他论坛的人在下面提出了建议,效果很好。
MyWebSocketActor::props 是 (actorRef) -> MyWebSocketActor.props(actorRef) 的简写 所以称它为 (actorRef) -> MyWebSocketActor.props(actorRef, otherStuff)
【讨论】:
这是从 Play 2.4 迁移到 2.6 的救命稻草。 这确实是我迁移项目所需的最重要的一行。请注意,通常用于将事物组合在一起的 ActorFlow 类在 Play 2.5 for Java 中被破坏了。但是,您可以从 Play 2.6 中获取 ActorFlow.actorRef() 并将该代码复制到您想要的任何位置并使用它。由于我们的迁移是从 Play 2.5 及其 LegacyWebSockets 开始的,所以我需要这个额外的步骤。【参考方案2】:一般来说,向actor传递参数如下:
final Props props = Props.create(SomeActorClass.class, arg1, arg2, ...);
您需要在正确的位置创建道具。参数被传递给actor类的构造函数。
【讨论】:
是的,我像这样编写了 Props.create,但我在从 ActorFlow.actorRef 传递它时遇到了麻烦。我试着把它叫做“ActorFlow.actorRef(MyWebSocketActor::props(otherStuff), actorSystem, materializer));)” 但它没有用。来自其他论坛的一个人建议 MyWebSocketActor::props 是 (actorRef) -> MyWebSocketActor.props(actorRef) 的简写,所以将其称为 (actorRef) -> MyWebSocketActor.props(actorRef, otherStuff) 这很好用。以上是关于播放框架用java中的actor处理websockets的主要内容,如果未能解决你的问题,请参考以下文章