第二章Netty,ChannelFuture关闭问题
在 Netty 中,ChannelFuture 不仅用于处理连接的建立,还广泛用于处理 Channel 的关闭。由于 channel.close() 是一个异步非阻塞操作,直接调用后代码会立即继续执行,而不会等待 Channel 真正关闭。如果需要在关闭完成后执行清理工作(如释放资源、停止线程组等),必须正确处理 CloseFuture。以下是处理 Channel 关闭问题的核心机制与最佳实践:一、核心概念:CloseFuture每个 Channel都拥有一个唯一的 CloseFuture,可以通过 channel.closeFuture()获取。它是ChannelFuture` 的一种特殊形式专门用于监控 Channel 的关闭状态。不可逆性:一旦 Channel开始关闭,过程不可逆。自动完成当 Channel 完全关闭时,Netty内部会自动将 CloseFuture 标记为成功 (setSuccess)。生命周期终点:它是 Channel 生命周期的“终点站”,所有监听器会在关闭完成后被触发。二、常见错误做法以下两种写法无法保证在 Channel 真正关闭后才执行后续逻辑:直接写在 close() 之后同步代码中channel.close