小白也能看懂的 Netty 框架——实战(一)

小白也能看懂的 Netty 框架——实战(一)

一、架构回顾

简易Netty框架

image-20241203225612925

进一步查看BossGroup

image-20241203230347312

Netty的详细结构

image-20241204154932800

Netty抽象出了两组线程池:

  • BossGroup:专门负责接受客户端的连接。
  • WorkerGroup:负责网络的读写。

这两者都是 NIOEventLoopGroup 类型。

NIOEventLoopGroup 相当于一个事件循环组,它内部包含多个事件,每个事件都是 NIOEventLoop

NIOEventLoop 是一个持续循环执行处理任务的线程,每个线程都有一个 selector,用于监听绑定在上面的 Socket 网络通信。

NIOEventLoopGroup 可以有多个线程,也可以包含多个 NIOEventLoop

每个 Boss NIOEventLoop 的执行步骤:

  1. 轮询 accept 事件。
  2. 处理 accept 事件,建立与客户端的连接,生成 NIOSocketChannel,并将其注册到某个 Worker 的 NIOEventLoop 上的 selector
  3. 处理任务队列中的任务,即执行 runAllTasks

每个 Worker NIOEventLoop 的执行步骤:

  1. 轮询 readwrite 事件。
  2. 处理 I/O 事件,即处理 readwrite 操作,更新对应的 NIOSocketChannel
  3. 处理任务队列中的任务,即执行 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)  
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值