Playframework 推送到 Websocket
Posted
技术标签:
【中文标题】Playframework 推送到 Websocket【英文标题】:Playframework pushing to Websocket 【发布时间】:2018-04-29 10:17:42 【问题描述】:我阅读了 Play Framework 的 WebSocket 文档,但没有找到解决问题的方法。
问题描述
我有一个 API(Play 框架),它通过 POST 事件从客户端 1 (C1) 接收数据。我有另一个客户端,如果它正在侦听,它应该会自动更新(阅读:对 API 有一个开放的 WebSocket)。如何将接收到的数据推送到 Websocket 中?
Play Framework 的文档只显示了如何响应通过 Websocket 接收到的消息,而不是如何从服务器发送数据。
对解决方案的期望
您能否为这种行为举一个简单的例子?也许我们可以将它包含在 Play Framework 的文档中。我对 Akka 没有太多经验。
更多信息
在 Play Framework 中有两种使用 Websocket 的方法。一种是与演员合作,另一种是直接与 Akka Streams 合作。我认为在这种情况下,Akka Streams 可能更直接,但我可以同时采用两种方式(或者可能是第三种方式?)。
如果您需要更多信息,请在下方发表评论!
【问题讨论】:
【参考方案1】:你必须像这样连接你的客户:
首先,在路由文件中:
GET /connectWebSocket @myPackage.myController.webSocket
然后,你的控制器:
def webSocket: WebSocket = WebSocket.accept[String, String] _ =>
ActorFlow.actorRef(ActorReceivingMessagesFromPost.props())
之后,您创建一个从帖子接收消息的参与者,接收方式如下:
class ActorReceivingMessagesFromPost(out: ActorRef) extends Actor
override def receive: Receive =
case msg: String => out ! msg
如果您需要更多信息,请告诉我
【讨论】:
我正在使用 Java,但我仍然可以理解您的解决方案(大部分)。但我看不出你是如何从 POST 动作中告诉演员的。我有一个动作addData(data)
通过 POST 路由调用。我想推data
,如果有一个演员在处理WebSocket
。
在您的 addData 操作中,向演员 ActorReceivingMessagesFromPost 发送消息。您可能应该在应用程序启动时创建它(使用 bindActor),并使用 val actor: ActorSelection = actorSystem.actorSelection(actorPath) 向它发送一条消息,并使用 actor 发送一条消息! “味精”以上是关于Playframework 推送到 Websocket的主要内容,如果未能解决你的问题,请参考以下文章
推送到 GitHub - 推送到...(回购)过早的 EOF 失败
如何将某个函数推送到返回数组的函数?(是否可以推送到返回数组的函数)[关闭]