发送和接收自定义消息
使用
!?
来发送同步消息,使用!发送异步无返回消息使用
!!
发送异步有返回消息
发送后,返回类型为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>
## 使用!发送异步无返回消息
```scala
package com.czxy.demo05
import scala.actors.Actor
object 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}")
}
}
}