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 失败

如何将某个函数推送到返回数组的函数?(是否可以推送到返回数组的函数)[关闭]

如何将指标直接推送到 Cortex

最好用正确的值实例化对象然后推送到向量,或者实例化,推送到向量然后设置正确的值?

Docker---本地镜像推送到阿里云

如何使用 AWS Kinesis Firehose 将嵌套结构推送到 Redshift