泛微e-Bridge任意文件上传漏洞深度剖析与安全防御实践
2026/6/25 18:13:46
Reactor 模型是一种事件驱动的并发处理模型,核心思想是:一个或多个事件处理器(Reactor)负责监听和处理多个连接的事件。
Netty 使用NioEventLoopGroup来实现 Reactor 模型:
┌─────────────────────────────────────────────────────────┐ │ BossGroup (Reactor) │ │ ┌─────────────┐ │ │ │ EventLoop │ 负责:接受客户端连接 │ │ └─────────────┘ │ └─────────────────────────────────────────────────────────┘ │ ▼ 连接建立后移交 ┌─────────────────────────────────────────────────────────┐ │ WorkerGroup (Reactor) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ EventLoop │ │ EventLoop │ │ EventLoop │ │ │ │ (线程1) │ │ (线程2) │ │ (线程3) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ 负责:读写数据、业务处理 │ └─────────────────────────────────────────────────────────┘┌─────────────┐ │ EventLoop │ ← 一个线程处理所有连接 │ (单线程) │ 接受连接 + 读写数据 └─────────────┘缺点:所有连接共享一个线程,某个连接处理慢会影响其他连接。
┌─────────────┐ │ EventLoop │ ← 一个线程只负责接受连接 │ (单线程) │ └─────────────┘ │ ▼ 连接建立后移交 ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ EventLoop │ │ EventLoop │ │ EventLoop │ │ (线程1) │ │ (线程2) │ │ (线程3) │ └─────────────┘ └─────────────┘ └─────────────┘ 负责读写数据优点:接受连接和读写数据分离,互不干扰。
┌─────────────────────────────────────────────────────────┐ │ BossGroup (主 Reactor) │ │ ┌─────────────┐ │ │ │ EventLoop │ 负责:接受客户端连接 │ │ └─────────────┘ │ └─────────────────────────────────────────────────────────┘ │ ▼ 连接建立后移交 ┌─────────────────────────────────────────────────────────┐ │ WorkerGroup (从 Reactor) │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ EventLoop │ │ EventLoop │ │ EventLoop │ │ │ │ (线程1) │ │ (线程2) │ │ (线程3) │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │ 负责:读写数据、业务处理 │ └─────────────────────────────────────────────────────────┘Netty 代码对应:
EventLoopGroupbossGroup=newNioEventLoopGroup(1);// 主 ReactorEventLoopGroupworkerGroup=newNioEventLoopGroup();// 从 Reactor(默认 CPU 核数 * 2)ChannelPipeline 是 Netty 中处理网络 I/O 操作的链式结构,由多个 Handler 组成。数据在管道中双向流动:
┌─────────────────────────────────────────────────────────┐ │ ChannelPipeline │ │ │ │ [Head] → [LoggingHandler] → [FrameDecoder] → │ │ [ProtocolDecoder] → [BusinessHandler] → [Tail] │ │ │ │ 数据流向: │ │ 下行(读):Head → Tail(从左到右) │ │ 上行(写):Tail → Head(从右到左) │ └─────────────────────────────────────────────────────────┘| 类型 | 说明 | 常用接口 |
|---|---|---|
| ChannelHandler | 基础接口 | ChannelHandler |
| ChannelInboundHandler | 处理下行事件(读) | ChannelInboundHandlerAdapter |
| ChannelOutboundHandler | 处理上行事件(写) | ChannelOutboundHandlerAdapter |
| ChannelDuplexHandler | 同时处理双向事件 | ChannelDuplexHandler |
ch.pipeline().addLast