您的位置:首页 > 其它

Netty的几个核心自我总结-新手必看-欢迎大神补充

2015-08-19 20:05 253 查看
摘要: Netty框架的几个核心类与主要职责,看了《netty权威指南》之后的一个总结

1:ByteBuf :是Netty自己封装的,对于byte的缓存操作辅助工具类,jdk源码nio也有对应的bytebuffer方法,但是方法的操作极度麻烦,因为Nio的byteBuf只提供了一个position指针,所有的操作都需要手动调用flip(),重置指针,读和写十分麻烦。但是byte在这个基础上做了优化。提供了readIndex和WriteIndex,并且WriteIndex>=readIndex.把读写操作的指针分离开,这样可以简化了操作类型。

2:bootstrap:是Netty的启动辅助类,引导netty服务的启动,做一些常规的绑定端口IP,设置责任链路,加入eventGroup线程池,设置一些常规的值等工作。

Bootstrap是客户端的启动程序类。
ServerBootstrap是服务端的启动程序类
Bootstrap和ServerBootstrap继承AbstractBootstrap。
3:channel:负责管理和建立连接的。管理网络的读写,客户端服务端的连接和断开,获取双方通信地址。获取责任链pipeline

3:Unsafe接口:是channel接口的辅助接口,不被开发者调用,是channel进行网络I/O操作的实际执行者。主要作用就是实现网络IO操作,比如:refister注册channel并设置感兴趣的事件,bind()方法绑定IP和端口。close()方法关联链路。write()方法,往需要返回的channel缓冲区中写入数据,此时信息其实并没有发送出去。flush()方法。将缓冲区写好的数据写入channel并发送出去。

4:handler: Handler是责任链路模式中的处理者。主要就是在接收到对应的状态之后,进行相对应的处理,可以理解为:在有限状态机中,如果状态发生变更,那么进行相对应的操作。

5:util:netty常用工具的封装类。

6:channelpipeline:类似servlet,属于责任链的一种变形。用于事件的拦截和业务逻辑的先后执行。他是channelHandler的容器。负责channelHandler的管理和拦截。在netty4.0的版本中,分为inbound和outbound

触发inbound事件有:channel注册,TCP链路建立成功,channelActive激活,读取消息操作,读操作完成通知事件。

当某个IO事件发生,例如:链路建立,链路关闭,读取操作完成,都会产生一个事件,事件在piperline中传播和处理,调用相对应的方法。piperline中以fireXXX命名的方法都是从IO流向用户业务Handler发起的Inbound事件。

触发outbound事件有:绑定本地地址事件,连接服务端事件,发送事件,刷新事件等。outbound事件通常由用户主动发起的网络IO操作,例如用户发起的连接操作,绑定操作,消息发送操作。

由用户线程或者代码发起的IO操作被称为outbound操作。

在netty5.0中Inbound和Outbound被合并成了统一的bound操作。

7:channelHandler:类似于过滤器,负责对IO事件的操作和处理。这里是netty业务处理的主体,一般做日志操作,消息编解码操作,性能统计操作等

8:eventLoopGroup和EventLoop,netty服务端启动需要定义两个EventLoop。客户端只要一个,每一个EventLoop都是一个reactor线程组。服务端第一个EventLoop用于和客户端建立连接,另外一个用于处理IO操作或者执行系统任务和定时任务。

Netty用户接受客户端的线程池主要职责:

1:接受客户端的TCP连接,初始化channel参数

2:将链路状态变更事件通知给channelPipeLine

Netty处理IO的线程池主要职责:

1:异步读取通信对端的数据包,发送读取事件到channelPipeline

2:异步发送消息到通信对端,调用ChannelPipeline的消息发送接口

3:执行系统调用的任务(handler)

4:执行定时任务。

9:ChannelFuture 是java的nio的future的扩展。用户获取返回的结果,netty的ChannelFuture的主要职责是:future上面addListener。添加监听器,或者相对应的返回结果后调用相对应的处理方法。

因为netty是异步的,一般所有的IO操作会执行之后会马上返回,而不是像是阻塞IO一样一直等待,知道返回结果,channelfuture主要解决:调用者如何获取异步操作的结果呢?

一般netty的NIO操作完成之后会回调,并且修改channelFuture的值,而值一旦被修改,就是状态的变更,那么就能获取到返回的结果,这时候触发相对应的监听器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: