轻松快速的开发协议服务器和客户端网络应用程序的NIO 框架,
- 它大大简化了TCP 或者UDP服务器的网络编程,
- 但是你仍然可以访问和使用底层的API,
- Netty 只是对其进行了高层的抽象。
- Netty 的简易和快速开发
- 并不意味着由它开发的程序将失去可维护性或者存在性能问题
EventLoopGroup
- 本身是一个线程池
- 其中包含了自定义个数的NioEventLoop,
- 每个NioEventLoop 是一个线程,
- 并且每个NioEventLoop 里面持有自己的selector 选择器
- Netty 之所以能提供高性能网络通讯,
- 其中一个原因是因为它使用Reactor 线程模型
- Netty
- 客户端持有一个EventLoopGroup 用来处理网络IO操作,
- 在服务器端持有两个EventLoopGroup,
- 其中boss组是专门用来接收客户端发来的TCP 链接请求的,
- worker组是专门用来具体处理完成三次握手的链接套接字的网络IO 请求的。
Channel 与 EventLoop 的关系
- 每个Channel 只会关联一个NioEventLoop
- 当Channel 是服务端通道NioServerSocketChannel 时候,
- NioServerSocketChannel本身
- 会被注册到boss EventLoopGroup 里面的
- 某一个NioEventLoop 管理的selector 选择器上,
- 而完成三次握手的链接套接字
- 是被注册到了worker EventLoopGroup 里面的
- 某一个NioEventLoop 管理的selector 选择器上;
- NioServerSocketChannel本身
- 多个Channel 可以注册到
- 同一个NioEventLoop管理的selector 选择器上
ChannelPipeline
- Netty 中的ChannelPipeline 类似于Tomcat 容器中的Filter链,
- 属于设计模式中的责任链模式,
- 其中链上的每个节点就是一个ChannelHandler
- 在netty 中每个Channel 有属于自己的ChannelPipeline,
- 对从Channel 中读取或者要写入Channel 中的数据进行依次处理,
Netty 客户端底层与Java NIO 对应关系