我正在使用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
我该怎么做?
答案 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
的文档