1.Channel
Java NIO 的一个基本构造
一个到实体的开放连接,例如,读操作和写操作,channel可以看做事出站和入站的数据载体
2.回调
本质上一个方法,一个指针,一个指向另一个方法的引用,可以让其翻过来调用调用者
Netty利用了回调实现事件的处理
3.Future
另一种操作完成时候的通知机制,类似子线程完成了某项任务,可以让父线程手动的去查询子线程的完成情况
Netty有着自己的实现ChannelFuture,执行异步操作使用
ChannelFuture提供了额外的方法,可以注册多个ChannelFutureListener实例
在其中的实现方式,就是提供了一个回调,方便在操作完成的时候进行调用,来让父线程检测是否完成了任务
Netty的每个出站都返回一个channelFuture,保证不会阻塞
4.事件和ChannelHandler
Netty利用不同的事件来通知我们状态的改变和操作的状态,能够基于已经发生的事件来触发适当的动作,常见的事件有:记录日志,数据转换,流控制,应用程序逻辑
出站数据或者相关的状态改变的事件也可能触发:连接激活或者失活,数据读取,用户事件,错误事件
然后我们将其总结一下
Netty的异步编程是建立在Future和回调概念上的,事件派发到ChannelHander上,其结合导致有了一个合理的处理环境
我么你只需要提供回调或者操作返回的Future就可以处理连接操作,更加的高效化
对于选择器 事件 EventLoop这些概念
Selector是一种更高层次的概念,消除了连接派发,然后,为每一个Channel分配一个EventLoop
包括,注册感兴趣的事件
事件派发给ChannelHandler
安排进一步的动作
EventLoop,由一个线程驱动,可以处理一个Channel的所有IO,整个生命周期都不会变化