ChannelFuture异步模型

Netty中的操作,如bind、Connect、Write,会返回一个ChannelFuture。
调用者并不能立刻获得结果,而是通过Future-Listener机制,用户可以主动获取或等待通知机制获取IO操作结果。
Netty的异步模型建立在Future和Callback之上的。

假设有个方法func,计算非常耗时,等待显然不合适。那么可以在调用func时,返回一个Future对象,后续可以通过Future监控func的处理过程。

Future说明

  • 表示异步执行的结果,可以使用它所提供的方法检测执行是否完成
  • ChannelFuture是一个接口,可以添加监听器,当监听的事件完成时,就会通知到监听器。
			ChannelFuture cf = bootstrap.bind(6666).sync();
			// 添加Listener
            cf.addListener(new ChannelFutureListener() {
     
                @Override
                public void operationComplete(ChannelFuture future) throws Exception {
     
                    if (future.isSuccess()){
     
                        System.out.println("绑定完成");
                    }else{
     
                        System.out.println("绑定失败");
                    }
                }
            });

监听事件完成,就会执行operationComplete,可以通过isSuccess、isCancelled、isDone等来判断执行结果。

相比传统的阻塞IO,执行IO操作就会阻塞在这里,直到完成。
异步的优点就是不会阻塞,线程在IO期间可以做些其他事情。在高并发的情况下会更稳点和更高的吞吐量。

你可能感兴趣的:(Netty,Future)