前言
本篇博文是《从0到1学习 Netty》系列的第八篇博文,主要内容是介绍 Netty 中 ChannelFuture 与 CloseFuture 的使用,解决连接问题与关闭问题,往期系列文章请访问博主的 Netty 专栏,博文中的所有代码全部收集在博主的 GitHub 仓库中;
连接问题与 ChannelFuture
在 Netty 中,所有的 I/O 操作都是异步的,因此当你发起一个 I/O 操作时,它会立即返回一个 ChannelFuture
对象,该对象代表了尚未完成的操作。ChannelFuture
提供了一种在操作完成时通知应用程序的机制,以便应用程序可以执行某些操作或检索操作的结果。
例如,在写入数据到 Channel
时,调用 write()
方法将立即返回一个 ChannelFuture
对象,而不是等待数据实际被写入。通过添加侦听器(Listener)到 ChannelFuture
,当写操作完成时,侦听器将被通知,从而使应用程序能够对写入数据的结果做出响应。
sync
sync()
方法是 ChannelFuture 接口中的一个同步方法,它将阻塞当前线程,直到这个 ChannelFuture 执行完毕。调用 sync()
方法后会等待对应的 I/O 操作完成,如果操作失败则会抛出异常。
复用上篇博文 从0到1(七):入门-EventLoop 中的服务端代码,略微调整一下客户端代码如下:
java
复制代码
@Slf4j public class ChannelFutureClient { public static void main(String[] args) throws InterruptedException { ChannelFuture channelFuture = new Bootstrap() .group(new NioEventLoopGroup()) .channel(NioSocketChannel.class) .handler(new ChannelInitializer<NioSocketChannel>() { @Override protected void initChannel(NioSock