# 一、Netty基础理论

# 什么是Netty

Netty是 一个异步事件驱动的网络应用程序框架,用于开发的高性能协议服务器和客户端。Netty本质是上对Java NIO的封装,采用Reactor线程模型(Selector(多路复用)器、Acceptor、Handler)、零拷贝技术,极大的提升了socket通信性能。

# Netty的特点

高并发、传输快和封装好

  • 高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,对比于 BIO(Blocking I/O,阻塞IO),他的并发性能得到了很大提高。
  • 传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输。
  • 封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口。

# Netty的应用场景

Netty主要作为基础通信框架提供高性能、低延时的通信服务。可用于构建高性能、低延时的各种Java中间件,例如阿里分布式服务框架 Dubbo、 RocketMQ 默认使用 Netty 作为通讯框架。

在个人开发的项目中,主要用来作为基础设备通信框架,例如采用NIO做情报板、水电表数据及基础设备信息的采集。

  • 情报板通信:停车位自动发布,其发布过程分为四个阶段,1.删除旧文件 2.创建文件 3.下发文件 4. 播放文
  • 设备状态采集:通过SNMP协议,NIO获取并异步更新设备状态

# 二、Netty架构

# Netty的处理流程

  • (以服务端为例子)
  1. 创建ServerBootstrap启动器
    • 绑定Reactor线程池
    • 绑定NIO SocketChannel
    • 绑定ChannelHandler
    • 绑定端口并通过Selector轮询监听
  2. 客户端通过IP + 端口连接服务端
  3. 服务端监听到连接,创建channel注册到服务端的EventLoopGroup(类似于线程池)
  4. EventLoopGroup分发channel到具体的EventLoop,每个EventLoop管理并监听多个channel
  5. EventLoop监听到客户端channel的IO事件,调用ChannelPipeline中的入站handler进行处理
  6. handler进行解析、执行业务,通过channel将结果发送到出站handler,由其进行包的封装

Drawing 1.png

  • 服务端

image-20220903114749308

image-20220903114818970

  • 客户端

image-20220903114843180

Last Updated: 2022-9-5 1:18:13 ├F10: AM┤