我想创建不关闭通道即可接收响应的TCP客户端。我正在使用Netty并在此处引用回显示例“ https://netty.io/4.1/xref/io/netty/example/echo/EchoClient.html”。
似乎每个Netty示例TCP客户端都有以下代码。
f.channel().closeFuture().sync();
这一直等到通道关闭。由于我试图创建类似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();