私は新しいAkkaIOを使用しており、このチュートリアル(単純なサーバークライアントアプリケーション)に従いました。私のサーバーアクターのシステムコードは次のようになります。
// create the sever system
ActorSystem tcpServerSystem = ActorSystem.create("tcp-server-system");
// create the tcp actor
final ActorRef tcpServer = Tcp.get(tcpServerSystem).manager();
// create the server actor;
ActorRef serverActor = tcpServerSystem.actorOf(new Props(ServerActor.class).withRouter(new RoundRobinRouter(5)), "server");
// tell the tcp server to use an actor for listen connection on;
final List<Inet.SocketOption> options = new ArrayList<Inet.SocketOption>();
options.add(TcpSO.reuseAddress(true));
tcpServer.tell(TcpMessage.bind(serverActor, new InetSocketAddress("127.0.0.1", 12345), 10, options),
serverActor);
ServerActorクラスは、onReceiveで次のことを行う単なるアクターです。
logger.info("Received: " + o);
if (o instanceof Tcp.Connected){
connectionActor = getSender();
connectionActor.tell(TcpMessage.register(getSelf()), getSelf());
ByteStringBuilder byteStringBuilder = new ByteStringBuilder();
byteStringBuilder.putBytes("Hello Worlds".getBytes());
connectionActor.tell(TcpMessage.write(byteStringBuilder.result()), getSelf());
}
私はnetcatを使用してサーバーアクターをテストしようとしていますが、この「奇妙な」動作があります。サーバーに接続する最初のクライアントだけがサーバーから送信されたメッセージを受信しています。nextsクライアントはサーバーに接続できますが、メッセージを受信しません。また、デバッグモードでは、サーバーアクターはTcp.Connectedメッセージを取得しないため(最初に接続されたクライアントを除く)、次のクライアントは接続できますが、登録メッセージをクライアントに送信できませんでした。