Netty学习(五)----异步模型简述

异步模型


基本介绍:

  • 异步的概念与同步相对。当一个异步过程调用发出后,调用者不会立刻得到结果,实际处理这个调用的组件在完成后,通过状态、通知和回调来通知调用者;
  • Netty中的 I/O 操作是异步的,包括 Bind 、 Write 、Connect 的等操作会简单的返回一个ChannelFuture。
  • 当调用者并不能立刻得到记过,而是通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得I/O操作结果。
  • Netty的异步操作模型是在future和callback之上。callback就是回调,重点是Future。其核心思想时候:假设一个方法run,计算过程可能非常耗时,同步等待其结果显示不合适。呢么可以在调用fun的时候,立马返回一个Future,后续可以通过Future去监控fun的处理过程(既: Future-Listener机制)

下述代码以指数退让的方式进行连接,connect后返回了相应的Future对象;

 /**
     * 以指数退避的方式进行失败重试
     *
     * @param bootstrap  netty-client 引导类
     * @param host       host
     * @param port       port
     * @param retryTimes 重试次数
     */
    private static void connect(Bootstrap bootstrap, String host, int port, int retryTimes) {

        ChannelFuture channelFuture = bootstrap.connect(host, port).addListener(future -> {

            if (future.isSuccess()) {

                System.out.println("连接成功");

            } else if (retryTimes == 0) {

                System.out.println("尝试至最大次数,但仍然失败¬");

            } else {

                int order = (MAX_RETRY_TIME - retryTimes) + 1;
                int delay = 1 << order;

                System.err.println(new Date() + ": 连接失败,第" + order + "次重连……");


                Runnable runnable = () -> connect(bootstrap, host, port, retryTimes - 1);

                bootstrap.config()
                        .group()
                        //Runnable var1, long var2, TimeUnit var4
                        .schedule(runnable, delay, TimeUnit.SECONDS);//延时多久后进行一次执行

            }


        });


    }

ChannelFuture:

The result of an asynchronous {@link Channel} I/O operation.

  • 表示异步执行结果,通过其提供的API检查执行是否完成
  • 本质是继承了Future,并且定义了更多方法。如可以添加监听器
  • 工作原理(下图pipeline):在这里插入图片描述
    1) 在使用Netty进行编程时,拦截操作和转换出入栈数据只需要根据callback或者利用future即可。使得链式操作简单、高效。
    2)从网络基础编码中脱离。

在这里插入图片描述

  • 当Future对象刚刚创建时,处于非玩成状态,掉用者可以通过返回的ChannelFuture来获取操作执行的状态,注册监听函数玩成执行后的操作;
  • 常见的API:isDone、isSuccess、getCause、addListener
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值