1、Bootstrap与ServerBootstrap
bootstrap用于引导Netty的启动,Bootstrap是客户端的引导类,ServerBootstrap是服务端引导类。类继承关系:
2、Future与ChannelFuture
Netty中的操作都是异步的,等待完成或者注册监听。如:
//b为ServerBootstrap实例
ChannelFuture f = b.bind().sync();
3、Channel
- Netty网络通信的组件,用于网络IO操作。
- 通过Channel可以获得当前王略连接的通道的状态与网络配置参数。
- Channel提供异步的网络IO操作,调用后立即返回ChannelFuture,通过注册监听,或者同步等待,最终获取结果。
Channel根据不同的协议、不同的阻塞类型,分为不同的Channel类型:
通过名称也能大概猜出来其分别的作用。
4、Selector
Netty基于java.nio.channels.Selector对象实现IO多路复用,通过Selector一个线程可以监听多个连接的Channel事件。当向一个Selector中注册Channel后,Selector内部的机制就可以自动不断的Select这些注册的Channel是否有就绪的IO事件(可读、可写、网络连接完成等)。
5、ChannelHandler
ChannelHandler属于业务的核心接口,用于处理IO事件或者拦截IO操作,并将其转发到ChannelPipeline(业务处理链)中的下一个处理程序。
贴个实现类关系图:
6、Pipeline与ChannelPipeline
- ChannelPipeline是一个handler的集合,它负责处理和拦截出站和入站的事件和操作。
- ChannelPipeline实现了拦截过滤器模式,使用户能控制事件的处理方式。
- 在Netty中,每个Channel都有且只有一个ChannelPipeline与之对应。
一个 Channel 包含了一个 ChannelPipeline,而 ChannelPipeline 中又维护了一个由 ChannelHandlerContext 组成的双向链表,并且每个 ChannelHandlerContext 中又关联着一个 ChannelHandler。
7、ChannelHandlerContext
保存Channel相关的所有上下文信息,同时关联一个ChannelHandler。
8、ChannelOption
Netty创建Channel实例后,可以通过ChannelOption设置参数。
9、NioEventLoop与NioEventLoopGroup
NioEventLoopGroup可以理解为线程池,NioEventLoop理解为一个线程,每个EventLoop对应一个Selector,负责处理多个Channel上的事件。
第一个boss EventLoopGroup分配一个EventLoop负责创建Channels传入的连接请求。一旦连接接受,第二个work EventLoopGroup分配一个 EventLoop给它的Channel。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。