如何使用Play将消息从actor发送到Websocket! 2.4?

时间:2016-02-25 00:17:51

标签: scala playframework websocket akka actor

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

我该怎么做?

1 个答案:

答案 0 :(得分:1)

"实例"每个连接创建MyWebSocketActor。因此,当您想要向其发送消息时,我想您希望向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

的文档