16

Akka IO で Scala を使用する場合、アクタを厳密にリッスンし、接続が確立されたときにそのソケット (読み取り、書き込みなど) を担当する新しいアクターを作成する方法はありますか?

これまでのところ、私はこれを持っています。問題は、サーバー アクターがデータを受信して​​いることです。新しく作成されたクライアント アクターにソケットの所有権を譲渡して、ソケットに関連するメッセージを受信できるようにしたいと考えています。誰もそれを行う方法を知っていますか?

編集:ソリューションを追加しました。ActorRefをacceptのカリー化されたパラメーターに渡す必要がありました

import akka.actor._
import akka.actor.IO.SocketHandle
import java.net.InetSocketAddress


/**
 * Purpose:
 * User: chuck
 * Date: 17/01/13
 * Time: 5:37 PM
 */
object Main {

  class Server extends Actor {

    override def preStart() {
      IOManager(context.system) listen new InetSocketAddress(3333)
    }

    def receive = {

      case IO.NewClient(server) =>

        val client = context.actorOf(Props(new Client()))
        server.accept()(client)
        println("Client accepted")

      case IO.Read(socket, bytes) =>
        println("Server " + bytes)


    }
  }

  class Client() extends Actor {

    def receive = {

      case IO.Read(socket, bytes) =>
        println("Client " + bytes)

      case IO.Closed(socket, reason) =>
        println("Socket closed " + reason)

    }

  }

  def main(args: Array[String]) {
    val system = ActorSystem()
    system.actorOf(Props(new Server))
  }

}

ありがとう!

4

1 に答える 1