0
点赞
收藏
分享

微信扫一扫

11-Netty 高性能架构设计-异步模型(ChannelFuture)


异步模型

基本介绍


  1. 异步模型和同步模型相对, 当一个异步过程调用发出后, 调用者不能立刻得到结果, 实际处理这个调用的组件在完成后,通过状态, 通知和回调来通知调用者
  2. Netty中的IO操作是异步的,包括bind, write, Connect等操作会简单的返回一个ChannelFuture


  3. 调用者不能立刻获得结果, 而是通过Future-listener机制, 用户可以方便的主动获取或者通过通知机制获得IO操作结果
  4. Netty的异步模型是建立在future 和 callback之上的, callback就是回调, 重点说Future, 他的核心思想是: 假设一个方法fun, 计算过程可能非常耗时, 等待Fun返回显然不合适, 那么可以再调用Fun的时候,立马写一个Future, 后续可以通过Future去监控方法Fun的处理过程, (即Future-Listener 机制)

Futurn说明


  1. 表示异步的执行结果, 可以通过他提供的方法来检查执行是否完成,比如检索计算等等
  2. ChannelFuture是一个接口: public interface ChannelFuture extends Future<Void> {}


  1. 我们可以添加监听器, 当监听的事件发生时, 就会通知到监听器, 案例说明

工作原理示意图

11-Netty 高性能架构设计-异步模型(ChannelFuture)_io操作

说明:


  1. 在使用Netty进行编程时拦截操作和转换出入站数据只需要提供callback或者利用future即可, 这使链式操作简单, 高效, 并有利于编写可重用的通用的代码
  2. Netty框架的目标就是让你的业务逻辑从网络基础应用编码中分离出来, 解脱出来

future-listener机制


  1. 当Future对象刚刚创建时, 处于非完成状态, 调用者可以通过返回的ChannelFuture来获取操作执行的状态, 注册监听函数来执行完成后的操作
  2. 常见有如下操作


  1. 通过isDone方法来判断当前操作是否完成
  2. 通过isSuccess方法来判断已完成的当前操作是否成功


  3. 通过getCause方法来获取已完成的当前操作失败的原因
  4. 通过isCancelled方法来判断已完成的当前操作是否被取消


  5. 通过addListener方法注册监听器, 当操作已完成(isDone 方法返回完成), 将会通知指定的监听器, 如果Future对象已完成, 则通知指定的监听器

举例说明

// 绑定一个接口 并且同步 生成一个 ChannelFuture 对象
// 启动服务器(并绑定端口)
ChannelFuture channelFuture = serverBootstrap.bind(6668).sync();

// 给channelFuture注册监听器
channelFuture.addListener(new ChannelFutureListener() {
@Override
public void operationComplete(ChannelFuture channelFuture) throws Exception {
// 如果操作成功
if (channelFuture.isSuccess()){
System.out.println("监听端口 6668 成功");
}else{
System.out.println("监听端口 6668 失败");
}
}
});


执行结果

server is ready......
监听端口 6668 成功


举报

相关推荐

0 条评论