【第7篇】Netty初始化过程与Future源码分析
2019-05-20 本文已影响1人
爱学习的蹭蹭
1、 ServerBootStrap
- ServerBootStrap是一个BootStrap的一个启动类
- group 会处理所有的IO和事件
2、 return this
- return this表示返回方法的对象
3、Netty的反射支持(重点)
- 反射:通过反射机制能获取类定义的属性与方法成员,这样的动态调用方式称为反射
- 凡是方法接收一个
class的对象
,其实就是跟反射有关如:channel(NioServerSocketChannel.class)
- 代码显示
//创建ServerBootstrap
ServerBootstrap serverBootstrap = new ServerBootstrap();
//设置参数的接收请求bossGroup和workerGroup对参数的实现实现对象处理、并对处理器绑定Channel
serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).
handler(new LoggingHandler(LogLevel.INFO)). childHandler(new WebSocketChannelInitializer());
channel
4、Future(重点)
- Future是异步,提供中断、是否执行,是否完成
- Future是一个futurej计算异步的结果,异步的计算他动作一定发生在另外一个线程的Future.get的方法的结果之前,由于内存一致性所影响的(难点)
5、 ChannelFuture(重点)
- ChannelFuture 使用大量的事件监听器,是一个Channel异步IO的操作,而且Netty的所有IO都是异步的
- 一个ChannelFuture要么是完成与未完成状态,当I/O操作开始时,一个Future的创建,表示完成状态有失败与成功的返回
- ChannelFuture提供很多方法进行检测I/O,监控await不建议使用此方法,建议addListener方法,由于此方法是非阻塞
- 不要在ChannelHandler调用await方法,通常事件处理器方法被I/O的方法调用,await事件被的处理器调用的话,那么时间的处理被IO线程被调用的,那么等待的I/O操作就可能不会完成就可能造成死锁
(**Do note confuse I/O timeout and await Timeout,意思就说不要把IO超时与await超时混在一谈**)
6、Netty的Future与JDK的Future有点在哪里?(重点和改良点)
- Netty的Future它是继承JDK的Future
- JDK的Future不知道什么时候调用Future.get()方法,Netty使用监听器解决这个问题,使用观察者模式
- Netty的Future提供可以调用性,可用性的问题进行改良
- Netty Future
7、ChannelPipeline的作用(重点)
- ChannelPipeline管道,将多个Channel连接起来一起进行操作
- initChaannel当主持时会被调用,当实例方法返回的时会从管道进行移除
8、 Netty使用监听(观察设计模式)
- 凡是用监听几乎都是使用观察模式(状态发生变化)