Scala 无法在Akka WebSocket中创建其他参与者
我是阿克卡和斯卡拉的新手。我正在尝试使用Scala和Play framework 2.5.3中的Akka制作一个聊天应用程序。我使用了官方文档中的上述代码。我只是想创建另一个actor(上面代码中的maincactor),以便首先验证来自客户端的消息,然后将其发送回。但问题是mainActor无法将消息发送到另一个类case sendMsg。另外,如果我尝试在任何不同点创建参与者,它会给我编译错误意外异常:临时异常Scala 无法在Akka WebSocket中创建其他参与者,scala,playframework,websocket,akka,Scala,Playframework,Websocket,Akka,我是阿克卡和斯卡拉的新手。我正在尝试使用Scala和Play framework 2.5.3中的Akka制作一个聊天应用程序。我使用了官方文档中的上述代码。我只是想创建另一个actor(上面代码中的maincactor),以便首先验证来自客户端的消息,然后将其发送回。但问题是mainActor无法将消息发送到另一个类case sendMsg。另外,如果我尝试在任何不同点创建参与者,它会给我编译错误意外异常:临时异常 class HomeController @Inject (implicit
class HomeController @Inject (implicit actorSystem:ActorSystem, materializer :Materializer) extends Controller
{
case class sendMsg(msg:JsValue)
class MYWSACTOR(out:ActorRef,mainActor:ActorRef) extends Actor
{
def receive =
{
case msg : JsValue =>
mainActor ! sendMsg(msg)
case sendMsg(msg) =>
{
/* validation part */
out ! msg
}
}
}
}
val mainActor = actorSystem.actorOf(Props[MYWSACTOR],"mainActor")
def object MYWSACTOR
{
def props(out:ActorRef) = Props(new MYWSACTOR(out,mainActor))
}
def socket = WebSocket.accept[JsValue,JsValue]
{
request =>
ActorFlow.actorRef(out => MYWSACTOR.props(out))
}
关键是,您可以使用实际消息发送
ActorRef
(或者默认情况下,您可以让发送者ActorRef
调用sender()
),然后您可以重播到该ActorRef。希望您能做到:
class HomeController @Inject (implicit actorSystem:ActorSystem, materializer :Materializer) extends Controller
{
case class sendMsg(msg:JsValue)
class MYWSACTOR(out:ActorRef,mainActor:ActorRef) extends Actor
{
def receive =
{
case msg : JsValue =>
mainActor ! sendMsg(msg)
case sendMsg(msg) =>
{
/* validation part */
out ! msg
}
}
}
}
val mainActor = actorSystem.actorOf(Props[MYWSACTOR],"mainActor")
def object MYWSACTOR
{
def props(out:ActorRef) = Props(new MYWSACTOR(out,mainActor))
}
def socket = WebSocket.accept[JsValue,JsValue]
{
request =>
ActorFlow.actorRef(out => MYWSACTOR.props(out))
}
关键是,您可以使用实际消息发送
ActorRef
(或者默认情况下,您可以获得一个发送者ActorRef
调用sender()
),然后您可以重播到此ActorRef。仔细阅读您的代码,MYWSACTOR
接受两个参数,因此val maincactor=actorSystem.actorOf(Props[MYWSACTOR],“mainActor”)
无效,您需要传递额外的参数。我在这里感到困惑…因为我刚刚创建的actor具有MYWSACTOR类的道具,我需要在这里传递参数吗?如果你能给我举个例子会很有帮助。阅读文档:你的主要演员需要两个参数。但我想知道谁将是它的主角,它应该是空的吗?(当然不是)。也许你需要为这些演员设置两个不同的类。我尝试了为mainActor设置不同的类,但当我想从MYWSACTOR传递这些类时,它不起作用。实际上,我无法为任何工作将控件从out actor传递到mainActor。请仔细阅读您的代码,MYWSACTOR
接受两个参数,因此val mainActor=actorSystem.actorOf(Props[MYWSACTOR],“mainActor”)
无效,你需要传递额外的参数。我在这里很困惑…因为我刚刚创建的演员有MYWSACTOR类的道具,我需要在这里传递参数吗?如果你能给我举个例子会很有帮助。阅读文档:你的主要演员需要两个参数。但我想知道谁将是它的主角,它应该是空的吗?(当然不是)。也许你需要为这些演员设置两个不同的类。我尝试了为mainActor设置不同的类,但当我想从MYWSACTOR传递这些类时,它不起作用。实际上,对于任何工作,我都无法将控件从out actor传递到Main actor。