[netty]-概述

2022-01-05 14:53:41 浏览数 (2)

1. 概述

Netty 是由JBOSS 提供的一个Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络IO 程序。

Netty 是一个基于NIO 的网络编程框架,使用Netty 可以帮助你快速、简单的开发出一个网络应用,相当于简化和流程化了NIO 的开发过程。作为当前最流行的NIO 框架,Netty 在互联网领域、大数据分布式计算领域、游戏行业、通信行业等获得了广泛的应用,知名的Elasticsearch 、Dubbo 框架内部都采用了Netty。

image.pngimage.png

2. netty整体设计

2.1 线程模型

单线程模型

服务器端用一个线程通过多路复用搞定所有的IO 操作(包括连接,读、写等),编码简单,清晰明了,但是如果客户端连接数量较多,将无法支撑,咱们前面的NIO 案例就属于这种模型。

image.pngimage.png

线程池模型

服务器端采用一个线程专门处理客户端连接请求,采用一个线程池负责IO 操作。在绝大多数场景下,该模型都能满足使用。

image.pngimage.png

Netty模型

image.pngimage.png

比较类似于上面的线程池模型,Netty 抽象出两组线程池,BossGroup 专门负责接收客户端连接,WorkerGroup 专门负责网络读写操作。NioEventLoop 表示一个不断循环执行处理任务的线程,每个NioEventLoop 都有一个selector,用于监听绑定在其上的socket 网络通道。NioEventLoop 内部采用串行化设计,从消息的读取->解码->处理->编码->发送,始终由IO 线程NioEventLoop 负责。

  • 一个NioEventLoopGroup 下包含多个NioEventLoop
  • 每个NioEventLoop 中包含有一个Selector,一个taskQueue
  • 每个NioEventLoop 的Selector 上可以注册监听多个NioChannel
  • 每个NioChannel 只会绑定在唯一的NioEventLoop 上
  • 每个NioChannel 都绑定有一个自己的ChannelPipeline

2.2 异步模型

FUTURE, CALLBACK 和HANDLER

image.pngimage.png

Netty 的异步模型是建立在future 和callback 的之上的。callback 大家都比较熟悉了,这里重点说说Future,它的核心思想是:假设一个方法fun,计算过程可能非常耗时,等待fun返回显然不合适。那么可以在调用fun 的时候,立马返回一个Future,后续可以通过Future去监控方法fun 的处理过程。在使用Netty 进行编程时,拦截操作和转换出入站数据只需要您提供callback 或利用future 即可。这使得链式操作简单、高效, 并有利于编写可重用的、通用的代码。Netty 框架的目标就是让你的业务逻辑从网络基础应用编码中分离出来、解脱出来。

0 人点赞