【问题标题】:Scala / Play2 - WebSocket Enumerator and ActorScala / Play2 - WebSocket 枚举器和 Actor
【发布时间】:2014-10-13 22:12:17
【问题描述】:

我有一个网页可以提交长时间运行的作业。提交作业将提供指向详细作业视图的链接,其中包含运行作业时出现的日志消息。我不想在消息可用时显示消息,而无需重新加载页面。

为此,我使用 JavaScript 和相应的路由创建了一个 WebSocket 连接。我的想法是使用演员(akka)将消息从服​​务器端传递到客户端。

如何使用 scala 2.11 实现这一点并玩 2.3.4?

最好的问候!

【问题讨论】:

    标签: scala playframework playframework-2.3


    【解决方案1】:

    这里有详细说明:https://www.playframework.com/documentation/2.3.x/ScalaWebSockets

    这里是根据您的要求的粗略描述

    首先你使用 WebSocket.acceptWithActor

    创建一个动作
    case class MyMessage(s: String)
    
    def socket = WebSocket.acceptWithActor[MyMessage, JsValue] { request => out =>
      MyWebSocketActor.props(out)
    }
    
    object MyWebSocketActor {
       def props(out: ActorRef) = Props(new MyWebSocketActor(out))
    }
    
    class MyWebSocketActor(out: ActorRef) extends Actor {
      def receive = {
        case msg: MyMessage =>
         out ! Json.toJson(msg)
      }
    

    【讨论】:

    • 好的,这看起来不错 - 谢谢!但是,据我了解,我需要将带有 !() 的消息传递给 (out : ActorRef) 以便将它们发送给客户端。这是怎么做的?实际上我认为我需要 ActorRef 在提交作业时已经可用,而不是在创建 WebSocket 时。
    • 您将需要另一个演员来启动作业并在完成时向 MyWebsocketActor 返回一条消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 2016-05-24
    相关资源
    最近更新 更多