Netty - TCP-клиент получает ответ без закрытия канала - PullRequest
0 голосов
/ 03 июня 2019

Я хотел бы создать TCP-клиент, который получает ответ без закрытия канала.Я использую Netty и ссылаюсь на пример эха здесь: "https://netty.io/4.1/xref/io/netty/example/echo/EchoClient.html".

Кажется, что каждый пример клиента TCP Netty имеет следующий код.

f.channel().closeFuture().sync();

Это ждет, пока канал не будет закрыт.пытаюсь создать keep-alive, как TCP-соединение, я не хочу, чтобы TCP-клиент и сервер закрывали канал.

Если я не использую приведенный выше код, TCP-клиент завершает свой процесс без ожидания ответаЯ хочу, чтобы TCP-клиент ждал до тех пор, пока не получит ответ, но я не хочу использовать ReadTimeoutHandler, потому что он продолжает ждать, даже когда TCP-клиент уже заканчивает получать ответ.

Есть ли метод, который ожидает до тех пор, пока "channelReadComplete () "вызывается?

f.channel().closeFuture().sync();

Я бы хотел изменить приведенный выше код для ожидания вызова" channelReadComplete () ".

EventLoopGroup group = new NioEventLoopGroup();
try {
    Bootstrap b = new Bootstrap();
    b.group(group)
     .channel(NioSocketChannel.class)
     .option(ChannelOption.TCP_NODELAY, true)
     .handler(new ChannelInitializer<SocketChannel>() {
         @Override
         public void initChannel(SocketChannel ch) throws Exception {
             ChannelPipeline p = ch.pipeline();
             if (sslCtx != null) {
                 p.addLast(sslCtx.newHandler(ch.alloc(), HOST, PORT));
             }
             //p.addLast(new LoggingHandler(LogLevel.INFO));
             p.addLast(new EchoClientHandler());
         }
     });

    // Start the client.
    System.out.println("CLIENT - connect");
    ChannelFuture f = b.connect(HOST, PORT).sync();

    // Wait until the connection is closed.
    System.out.println("CLIENT - closeFuture");
    f.channel().closeFuture().sync();
...