0
Tcp 클라이언트 서버를 쓰고 있습니다. 서버 액터가 만들어집니다. 생성자에서 IP 및 임의의 포트에 바인딩합니다.Akka Tcp 바운드 메시지 사용량
나는 서버 액터에게 초기 메시지를 보내 통신을 시작합니다. 그러나이 초기 메시지는 서버 액터가 Bound 메시지를 받기 전에 수신됩니다.
서버가 초기 메시지를 받기 전에 Bound 메시지를받는 방법이 있습니까? 당신이 http://doc.akka.io/api/akka/2.4/index.html#akka.actor.Stash
을 사용할 수 있습니다
ServerActor extends Actor with ActorLogging
{
var myAddress:InetSocketAddress = new InetSocketAddress(hostName,0)
val options:List[akka.io.Inet.SocketOption] = List():::List(Tcp.SO.ReuseAddress(true)):::List(Tcp.SO.ReceiveBufferSize(65535))
manager ! Bind(self, myAddress,1,options)
def receive = {
case b @ Bound(addr) => println(addr)
myAddress = addr
case c @ Connected(remoteAddress,localAddress) =>
log.info("Client Connected. Remote: {} Local: {}", remoteAddress, localAddress)
remoteConnection = sender()
remoteConnection ! Register(self)
case CommandFailed(_: Bind) =>
log.error("Binding Command Failed. Exiting.")
context stop self
case mRegisterMessage: RegisterMessage =>
{
//create register response and send it back
val mRegisterResponseMessage = new RegisterResponseMessage(true, "IPv4", myAddress.getHostString, myAddress.getPort)
sender() ! RegisterResponseMessage
}
}
}