发送和接收自定义消息
使用
!?来发送同步消息,使用!发送异步无返回消息使用
!!发送异步有返回消息
发送后,返回类型为Future[Any]的对象
Future表示异步返回数据的封装,虽获取到Future的返回值,但不一定有值,可能在将来某一时刻才会返回消息
Future的isSet()可检查是否已经收到返回消息,apply()方法可获取返回数据在Actor的act方法中,可以使用sender获取发送者的Actor引用
使用!?来发送同步消息
```scala import scala.actors.Actor
object Test05 {
//定义一个信息类 包含两个字段(id、message) case class Message(id: Int, msg: String)
//定义一个信息回复类, 包含两个字段(message、name) case class RelyMessage(msg: String, name: String)
//创建一个MsgActor,并向它发送一个同步消息 object MsgActor extends Actor { override def act(): Unit = { //持续接收信息 loop { react { case Message(id,msg) => { println(s”接收到的信息 : ${id}/${msg}”) //使用!发送异步无返回消息 sender ! RelyMessage(“不太好”,”Tom”) } } } } }
def main(args: Array[String]): Unit = { //启动 MsgActor.start() //发送发送同步消息 有返回值 val replyMessage:Any = MsgActor !? Message(1,”您好”) //接收到的回复信息 val msg = replyMessage.asInstanceOf[RelyMessage] println(“回复消息:” + msg) } }
<a name="VWS7u"></a>## 使用!发送异步无返回消息```scalapackage com.czxy.demo05import scala.actors.Actorobject Test06 {// 定义一个消息类// 包含两个字段(message, company)case class Message(message: String, company: String)//创建一个MsgActor,并向它发送一个异步无返回消息object MsgActor extends Actor {override def act(): Unit = {loop {react {case Message(message, company) => println(s"MsgActor接收到消息${message}/${company}")}}}}def main(args: Array[String]): Unit = {//启动MsgActor.start()//发送异步无返回信息MsgActor ! Message("中国联通", "要交话费了")}}
使用!!发送异步有返回消息

import scala.actors.{Actor, Future}object Test12 {// MsgActor回复一个消息,该消息包含两个字段(message、name)// 打印回复消息//定义一个信息类 包含两个字段(id、message)case class Message(id: Int, msg: String)//定义一个信息回复类, 包含两个字段(message、name)case class RelyMessage(msg: String, name: String)//创建一个MsgActor,并向它发送一个异步有返回消息object MsgActor extends Actor {override def act(): Unit = {//持续接收信息loop {react {case Message(id,msg) => {println(s"接收到的信息 : ${id}/${msg}")//使用!发送异步无返回消息sender ! RelyMessage("收到消息","JIM")}}}}}def main(args: Array[String]): Unit = {//启动MsgActor.start()val future: Future[Any] = MsgActor !! Message(1,"您好")//检查是否收到信息while (!future.isSet){//收到信息val relyMessage = future.apply().asInstanceOf[RelyMessage]//打印回复信息println(s"relyMessage = ${relyMessage}")}}}
