共计 1031 个字符,预计需要花费 3 分钟才能阅读完成。
Netty 做为一款用于搭建高性能网络应用程序的高级框架,由以下几个主要构件组成:
一、Channel
Channel 是 java NIO 的一个基本构造,可以把 channel 看作是传入或者传出的数据载体,可以被打开或者关闭,连接或者断开连接。简单来说其实就是我们平常网络编程中经常使用的 socket 套接字对象。
二、EventLoop
EventLoop 定义了 Netty 的核心对象,用于处理 IO 事件,多线程模型、并发。EventLoop 及其相关的设计实现,我们这里不做深入了解。只需要暂时了解以下几点:
1、一个 EventLoopGroup 包含一个或者多个 EventLoop;
2、一个 EventLoop 在它的生命周期内只和一个 Thread 绑定;
3、所有有 EventLoop 处理的 I / O 事件都将在它专有的 Thread 上被处理;
4、一个 Channel 在它的生命周期内只注册于一个 EventLoop;
5、一个 EventLoop 可能会被分配给一个货多个 Channel;
其实我们可以简单的把 EventLoop 及其相关的实现 NioEventLoop、NioEventLoopGroup 等理解为 netty 针对我们网络编程时创建的多线程进行了封装和优化,构建了自己的线程模型。
三、ChannelHandler 和 ChannelPipeline
ChannelHandler 其实就是用于负责处理接收和发送数据的的业务逻辑,Netty 中可以注册多个 handler,以链式的方式进行处理,根据继承接口的不同,实现的顺序也不同。
1、ChannelInboundHandler:对接收的信息进行处理。一般用来执行解码、读取客户端数据、进行业务处理等。如 ByteToMessageDecoder;
2、ChannelOutboundHandler:对发送的信息进行处理,一般用来进行编码、发送报文到客户端。如 MessageToByteEncoder;
而 ChannelPipeline 为 ChannelHandler 链提供了容器。
四、ByteBuf
网络数据的操作归根到底是字节的操作,Netty 的 ByteBuf 做为一个强大高效的字节容器,提供了更加丰富的 API 用于字节的操作,同时保持了卓越的功能性和灵活性;
总结:
以上四个做为 Netty 的基本组件,可以理解为 Netty 把我们之前网络编程中使用到的各部分都进行了优化和高性能的封装,对比到实际的通信流程中,可以简单的用下图直观的表示
本章参考资料:《Netty 实战》
: