小白也能看懂的 Netty 框架——实战(一)
一、架构回顾
简易Netty框架

进一步查看BossGroup

Netty的详细结构

Netty抽象出了两组线程池:
- BossGroup:专门负责接受客户端的连接。
- WorkerGroup:负责网络的读写。
这两者都是
NIOEventLoopGroup类型。
NIOEventLoopGroup 相当于一个事件循环组,它内部包含多个事件,每个事件都是 NIOEventLoop。
NIOEventLoop 是一个持续循环执行处理任务的线程,每个线程都有一个 selector,用于监听绑定在上面的 Socket 网络通信。
NIOEventLoopGroup 可以有多个线程,也可以包含多个 NIOEventLoop。
每个 Boss NIOEventLoop 的执行步骤:
- 轮询
accept事件。 - 处理
accept事件,建立与客户端的连接,生成NIOSocketChannel,并将其注册到某个 Worker 的NIOEventLoop上的selector。 - 处理任务队列中的任务,即执行
runAllTasks。
每个 Worker NIOEventLoop 的执行步骤:
- 轮询
read和write事件。 - 处理 I/O 事件,即处理
read和write操作,更新对应的NIOSocketChannel。 - 处理任务队列中的任务,即执行
runAllTasks。
在处理业务时,每个 Worker NIOEventLoop 会使用 pipeline,其中包含一条管道。通过 pipeline,可以获取到处理器、拦截器等组件,从而实现定制化的业务处理。
这是对代码的分析及说明:
二、代码实战
服务端
nettyServer.java
package netty.simple;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
public class nettyServer {
public static void main(String[] args) throws InterruptedException {
// 创建两个group,分别用于boss和worker
EventLoopGroup bossGroup = new NioEventLoopGroup(); // 处理连接请求
EventLoopGroup workerGroup = new NioEventLoopGroup(); // 处理I/O操作
try {
ServerBootstrap bootstrap = new ServerBootstrap(); // 创建服务端启动对象
bootstrap.group(bossGroup, workerGroup) // 设置两个线程组
.channel(NioServerSocketChannel.class) // 使用 NioServerSocketChannel 作为通道实现
.option(ChannelOption.SO_BACKLOG, 128)

最低0.47元/天 解锁文章
1567

被折叠的 条评论
为什么被折叠?



