0%

Netty

Netty模型

  • Netty抽象出两组线程池: BossGroup专门负责接受客户端连接, WorkerGroup专门负责网络读写操作
  • NioEventLoop表示一个不断循环执行处理任务的线程, 每个NioEventLoop都有一个selector, 用于监听绑定在其上的socket网络通道
  • NioEventLoop内部采用串行化设计, 从消息的读取和处理以及发送始终由IO线程NioEventLoop负责

NioEventLoopGroup下包含多个NioEventLoop

每个NioEventLoop中包含一个Selector 一个taskQueue

每个NioEventLoop的Selector上可以注册监听多个NioChannel

每个NioChannel 只会绑定在唯一的NioEventLoop上

每个NioChannel都绑定有一个自己的ChannelPipeline

异步模型

  • 异步的概念和同步相对, 当异步过程调用发出后, 调用者不能立即得到结果, 实际处理这个调用的组件在完成过后, 通过状态、通知和回调来通知调用者

  • Netty中的I/O操作是异步的, 包括bind write connect等操作会简单的返回一个ChannelFuture

  • 调用者并不能立刻获得结果, 而是通过Future-Listener机制, 用户可以方便的主动获取或者通过通知机制获得IO操作结果

  • Netty的异步模型是建立在future和callback之上的; Future的核心思想是: 在调用一个比较耗时的方法时立马返回一个Future, 后续可以通过Future去监控方法的处理过程

  • Future表示异步的执行结果, 可以通过它提供的方法来检测执行是否完成

Netty的组件设计

netty的主要组件有

  • Channel
  • EventLoop
  • ChannelFuture
  • ChannelHandler
  • ChannelPipe

ChannelHandler 充当了处理入站和出站数据的应用程序逻辑的容器;业务逻辑通常写在一个或者多个ChannelHandler中

欢迎关注我的其它发布渠道