【问题标题】:How to send a message from an actor to a Websocket using Play! 2.4?如何使用 Play 将消息从演员发送到 Websocket! 2.4?
【发布时间】:2016-06-07 13:16:05
【问题描述】:

我正在与 Play 合作! Scala 2.4 和我有一个由演员处理的 Websocket,如下所示:

object MyWebSocketActor {
  def props(out: ActorRef) = Props(classOf[MyWebSocketActor], out)
}

class MyWebSocketActor @Inject()(out: ActorRef) extends Actor {
  override def receive = {
    case msg: String => out ! ("I received your message: " + msg)
    case _ => out ! "I did not received your message: "
  }
}

class MessagesController extends Controller {

  def openSocket = WebSocket.acceptWithActor[String, String] { request => out =>
    MyWebSocketActor.props(out)
  }
}

它运作良好,但我想向它 (MyWebSocketActor) 发送来自其他参与者的一些消息,但我无法成功。

我尝试在我的应用程序以 AkkaGuiceSupport 开头时启动它,如下所示:bindActor[MyWebSocketActor]("MyWebSocketActor"),以便能够将其注入到其他参与者中,如下所示:(@Named("MyWebSocketActor") myWebSocketActor: ActorRef) 但我收到错误,因为我没有提供当我绑定演员时,ActorRef
Guice 错误是:

No implementation for akka.actor.ActorRef was bound.
  while locating akka.actor.ActorRef
    for parameter 0 at controllers.MyWebSocketActor

我该怎么做?

【问题讨论】:

    标签: scala playframework websocket akka actor


    【解决方案1】:

    MyWebSocketActor 的“实例”是按连接创建的。所以当你想向它发送消息时,我猜你想向 MyWebSocketActor 的所有实例发送消息(这会将这些消息传输到所有与 websocket 有连接的浏览器)

    在这种情况下,您可以使用“PubSub”模块,让 MyWebSocketActor 订阅一个主题,然后将来自其他参与者的消息发布到该主题。

    这是一个激活器模板,其中包含非常好的示例:http://www.lightbend.com/activator/template/akka-clustering?_ga=1.54579683.939088969.1455862030

    这是 PubSub 模块 http://doc.akka.io/docs/akka/2.4.2/scala/distributed-pub-sub.html 的文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      • 2014-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多