文章目录
Channel
channel的主要作用
- close():关闭channel
- closeFuture():处理channel的关闭
- sync 同步等待channel关闭
- addListener 异步等待channel关闭
- pipeline():添加处理器
- write():将数据写入
- writeAndFlush():将数据写入并刷出
channel异步连接处理–channelFuture
- 采用sync阻塞连接操作
//方法1:使用sync方法同步处理结果
channelFuture.sync(); // 阻塞方法 连接建立后 才向下运行
Channel channel = channelFuture.channel();
channel.writeAndFlush("123");
- 采用addListener异步执行后续操作
// 方法2: 使用addListener(callback)方法异步处理结果
channelFuture.addListener(new ChannelFutureListener() {
// 连接建立完成后,调用该方法
@Override
public void operationComplete(ChannelFuture future) throws Exception {
Channel channel = future.channel();
log.debug("123");
channel.writeAndFlush("123123123");
}
});
channel异步关闭处理–CloseFuture
与连接操作类似的:
- 采用sync阻塞
// 1. 直接阻塞 同步操作
// ChannelFuture channelFuture1 = channel.closeFuture();
// channelFuture1.sync();
// log.debug("close operation");
- 调用closeFuture异步执行后续操作
// 2. 使用addListener
ChannelFuture channelFuture1 = channel.closeFuture();
channelFuture1.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
log.debug("close operation");
}
});
优雅的关闭程序
当然是采用优雅的关闭:拒绝新的任务,发送完毕所有的数据之后再关闭线程。
ChannelFuture channelFuture1 = channel.closeFuture();
channelFuture1.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture future) throws Exception {
log.debug("close operation");
group.shutdownGracefully();
}
});