深刻了解Netty【七】Netty核心组件


一、Bootstrap与ServerBootstrap

bootstrap用于引导Netty的启动,Bootstrap是客户端的引导类,ServerBootstrap是服务端引导类。类继承关系: bootstrap.pngjava

二、Future与ChannelFuture

Netty中的操做都是异步的,等待完成或者注册监听。如:bootstrap

//b为ServerBootstrap实例
 ChannelFuture f = b.bind().sync();

三、Channel

  • Netty网络通讯的组件,用于网络IO操做。
  • 经过Channel能够得到当前王略链接的通道的状态与网络配置参数。
  • Channel提供异步的网络IO操做,调用后当即返回ChannelFuture,经过注册监听,或者同步等待,最终获取结果。

Channel根据不一样的协议、不一样的阻塞类型,分为不一样的Channel类型: channel.png网络

经过名称也能大概猜出来其分别的做用。异步

四、Selector

Netty基于java.nio.channels.Selector对象实现IO多路复用,经过Selector一个线程能够监听多个链接的Channel事件。当向一个Selector中注册Channel后,Selector内部的机制就能够自动不断的Select这些注册的Channel是否有就绪的IO事件(可读、可写、网络链接完成等)。oop

五、ChannelHandler

ChannelHandler属于业务的核心接口,用于处理IO事件或者拦截IO操做,并将其转发到ChannelPipeline(业务处理链)中的下一个处理程序。 贴个实现类关系图:线程

ChannelHanlder.png

六、Pipeline与ChannelPipeline

  • ChannelPipeline是一个handler的集合,它负责处理和拦截出站和入站的事件和操做。
  • ChannelPipeline实现了拦截过滤器模式,使用户能控制事件的处理方式。
  • 在Netty中,每一个Channel都有且只有一个ChannelPipeline与之对应。

一个 Channel 包含了一个 ChannelPipeline,而 ChannelPipeline 中又维护了一个由 ChannelHandlerContext 组成的双向链表,而且每一个 ChannelHandlerContext 中又关联着一个 ChannelHandler。 channelpipeline.jpg3d

七、ChannelHandlerContext

保存Channel相关的全部上下文信息,同时关联一个ChannelHandler。code

八、ChannelOption

Netty建立Channel实例后,能够经过ChannelOption设置参数。对象

九、NioEventLoop与NioEventLoopGroup

NioEventLoopGroup能够理解为线程池,NioEventLoop理解为一个线程,每一个EventLoop对应一个Selector,负责处理多个Channel上的事件。 ServerwithtwoEventLoopGroups.jpgblog

第一个boss EventLoopGroup分配一个EventLoop负责建立Channels传入的链接请求。一旦链接接受,第二个work EventLoopGroup分配一个 EventLoop给它的Channel。

tencent.jpg

相关文章
相关标签/搜索