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