アクカIOでのScalaの使用は、アクタを厳重にリスニングしてから接続が確立されると、そのソケット(リーディング、ライティングなど)を担当する新しいアクタを作成する方法ですか?アクターごとのアクセルソケット
これまでのところ私はこれを持っています。問題は、サーバーアクターがデータを受信していることです。ソケットに関連するメッセージを受け取れるように、ソケットの所有権を新しい作成されたClientアクタに転送したいと思います。誰でもそのことを知っていますか?
編集:追加された解決策。 ActorRefを受け取りのカレーのパラメータに渡すだけでした。
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))
}
}
ありがとう!
:
質問の掲載したソリューションに私たちを残して?正確な問題は何ですか? –
ちょっと分かりました。valソケット= server.accept()はval socket = server.accept()(クライアント)である必要があります。クライアントは新しく作成されたアクタです – tkblackbelt
Akkaチームが設計した新しいIOレイヤで作業が行われていますより柔軟性の高いspray.ioチームと協力しています。あなたはそれが出てくるときにそれを調べることがあります。 –