我正在使用新的 Akka IO 并遵循本教程(这是一个简单的服务器-客户端应用程序)。我的服务器参与者系统代码如下所示:
// 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消息(第一个连接的客户端除外),因此无法向客户端发送注册消息,尽管下一个客户端可以连接。