一、Netty是什么
Netty是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。
二、Netty概述
2.1 Netty的优点
相对地,Netty的优点有很多:
- API使用简单,学习成本低。
- 功能强大,内置了多种解码编码器,支持多种协议。
- 性能高,对比其他主流的NIO框架,Netty的性能最优。
- 社区活跃,发现BUG会及时修复,迭代版本周期短,不断加入新的功能。
- Dubbo、Elasticsearch都采用了Netty,质量得到验证。
2.2 Netty的主要组件
2.2.1 Channel
channel是一个管道,用于连接字节缓冲区Buf和另一端的实体,这个实例可以是Socket,也可以是File, 在Nio网络编程模型中, 服务端和客户端进行IO数据交互(得到彼此推送的信息)的媒介就是Channel。
Channel通过ChannelPipeline中的多个Handler处理器,Channel使用它处理IO数据。
2.2.2 ChannelHandler
ChannelHandler用于处理Channel对应的事件。
2.2.3 ChannelPipeline
ChannelPipeline是一个用于存储ChannelHandler的队列,当一个channel生成时,它进入ChannelPipeline,按顺序通过ChannelHandler,由channelHandler对channel进行处理
2.2.4 EventLoop
EventLoop是netty资源的提供方,当一个Channel生成时会给Channel指定一个EventLoop,之后Channel的一切处理都与EventLoop进行处理,如果把channelHandler比喻成完成一件事的应该怎么做,那么EventLoop就是做这件事的人。
2.2.5 Bootstrap
Bootstrap是netty的引导程序,一个netty服务器启动时会首先执行引导,完成里面对应的配置,如设置EventLoopGroup、Channel等操作。
2.3 Channel的生命周期
状态 | 描述 |
---|---|
channelUnregistered | channel已创建但未注册到一个 EventLoop. |
channelRegistered | channel 注册到一个 EventLoop. |
channelActive | channel 变为活跃状态(连接到了远程主机),现在可以接收和发送数据了 |
channelInactive | channel 处于非活跃状态,没有连接到远程主机 |