0

私は新しい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メッセージを取得しないため(最初に接続されたクライアントを除く)、次のクライアントは接続できますが、登録メッセージをクライアントに送信できませんでした。

4

1 に答える 1

1

これは2.2-M1マイルストーンの既知の問題であり、構成されたBatchAcceptLimitに達しない限り、TcpListenerがセレクターにAcceptInterestを登録せず、接続が少ない場合に新しい受け入れが通知されないという問題がありました。保留中。

これは修正されており、次のマイルストーンリリースの一部になります。

于 2013-03-18T13:15:40.623 に答える