1.服务端demo
package com.base.bucket.scala
import akka.actor.{Actor, ActorRef, ActorSystem, Props}
import com.typesafe.config.ConfigFactory
/***
* 答疑机器人
*/
class SiriServer extends Actor{
override def receive: Receive = {
case ClientMessage(msg) =>{
msg match {
case "hi siri"=> sender() ! ServerMessage("我是siri,我收到消息了")
}
//case _ =>sender()! "what "
}
}
}
object SiriServer extends App {
val host :String ="127.0.0.1"
val port :Int = 8099
val conf = ConfigFactory.parseString(
s"""
|akka.actor.provider ="akka.remote.RemoteActorRefProvider"
|akka.remote.netty.tcp.hostname=$host
|akka.remote.netty.tcp.port=$port
|""".stripMargin
)
private val server: ActorSystem = ActorSystem("server", conf)
private val serverRef: ActorRef = server.actorOf(Props[SiriServer], "siri-001")
serverRef ! "start"
}
2.客户端demo
package com.base.bucket.scala
import akka.actor.{Actor, ActorRef, ActorSelection, ActorSystem, Props}
import com.typesafe.config.ConfigFactory
class ClientActor extends Actor{
//重写Actor preStart 获取服务端actorRef
var serverActorRef: ActorSelection = _
override def preStart(): Unit = {
serverActorRef = context.actorSelection("akka.tcp://server@127.0.0.1:8099/user/siri-001")
}
override def receive: Receive = {
case msg: String =>{
serverActorRef ! ClientMessage(msg)
}
//收到服务端消息
case ServerMessage(msg) =>println(s"收到服务端消息:$msg")
}
}
object ClientActor extends App {
val host :String ="127.0.0.1"
val port :Int = 8089
val conf = ConfigFactory.parseString(
s"""
|akka.actor.provider ="akka.remote.RemoteActorRefProvider"
|akka.remote.netty.tcp.hostname=$host
|akka.remote.netty.tcp.port=$port
|""".stripMargin
)
private val cli: ActorSystem = ActorSystem("server", conf)
private val cliRef: ActorRef = cli.actorOf(Props[ClientActor], "cli-001")
cliRef ! "hi siri"
}
3. 消息协议
package com.base.bucket.scala
//服务端发送给客户端消息协议
case class ServerMessage(msg:String)
//客户端发送给服务端消息协议
case class ClientMessage(msg:String)