@Slf4j
public class HelloClient {
public static void main(String[] args) throws InterruptedException {
// future和promise 的类型都是和异步方法配套使用,用来处理结果
ChannelFuture channelFuture = new Bootstrap()
.group(new NioEventLoopGroup())
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel ch) throws Exception {
ch.pipeline().addLast(new StringEncoder());
}
})
// 异步非阻塞方法,调用线程不关心结果
// 当前调用connect是主线程,真正执行connect的是nio 线程
.connect(new InetSocketAddress("localhost", 8888));
// // 阻塞方法,直到连接建立后才执行
// // 使用sync 方法同步处理结果
// // 2.1 阻塞当前线程,直到nio线程连接建立完毕
// channelFuture.sync();
//
// // 客户端和服务器之前连接对象
// Channel channel = channelFuture.channel();
// log.info("_____________:{}",channel.toString());
// // 收发数据都走handler
// channel.writeAndFlush("hello,hhh");
//
// System.out.println("");
// 2.2 使用addListener 方法异步处理结果
channelFuture.addListener(new ChannelFutureListener() {
// 在nio 连接建立好之后会调用operationComplete
@Override
public void operationComplete(ChannelFuture future) throws Exception {
Channel channel = future.channel();
log.info("{}",channel);
channel.writeAndFlush("hello");
}
});
}
}
netty ChannelFuture
最新推荐文章于 2023-07-05 18:02:09 发布