如何使用 Play! 从演员向 Websocket 发送消息! 2.4?

How to send a message from an actor to a Websocket using Play! 2.4?

我正在使用 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

我该怎么做?

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

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

这是一个激活器模板,其中包含关于此的非常好的示例: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