netty全过程图解(最详细清晰版)

前言:为了让大家对Netty有个整体认知,本文首先会对Netty的整个运作过程捋一遍,先不管什么异步、NIO、零拷贝之类的,细节的东西后面再说,直接淦图:

结合图示进行全过程讲解:

1. ServerBootStrap作为Netty的服务端入口,会对BossGroup和WorkGroup进行相关初始化操作,在BossGroup中,主要是对客户端的新连接请求进行处理(即OP_ACCEPT事件,但其实OP_ACCEPT事件的具体处理也会涉及到读写事件,因为数据不是读就是写),在WorkGroup中,则负责处理IO读写、编解码、业务逻辑等(即OP_READ事件、OP_WRITE事件)。服务端启动的时候会绑定一个端口,作为后续客户端连接入口,绑定端口的时候会在BossGroup(由NioEventLoopGroup类创建的对象)的其中一个NioEventLoop的Selector(多路复用器)上注册一条NioServerSocketChannel通道,后面的连接处理就是在通道中进行的。

2. BootStrap则作为Netty的客户端入口,会对ClientGroup进行相关初始化操作,在ClientGroup中,第一就是创建与服务端的连接(即OP_CONNECT事件),第二就是进行IO读写、编解码、业务逻辑等操作(即OP_READ事件、OP_WRITE事件)。

3. 服务端和客户端启动之后,当服务端收到客户端发来的连接请求,由于属于OP_ACCEPT事件,在BossGroup中处理。BossGroup(由NioEventLoopGroup类创建的对象)管理着若干个NioEventLoop,每个NioEventLoop持有一个线程(就好比线程池中的一组线程并发处理若干个连接请求),每个NioEventLoop上会创建一个Selector,一个Select

Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的协议服务器和客户端。它的全过过程图解主要包括以下几个步骤: 1. **创建ServerBootstrap**:首先,创建一个`ServerBootstrap`实例,它是Netty的核心组件,用于配置服务器端的行为。 ```java ServerBootstrap bootstrap = new ServerBootstrap(); ``` 2. **配置ChannelInitializer**:通过`bootstrap.group()`设置工作线程组,然后添加一个`ChannelInitializer`,它负责创建并初始化一个新的`Channel`。 ```java bootstrap.childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { // 创建和配置ChannelPipeline } }); ``` 3. **ChannelPipeline**:`ChannelPipeline`是事件处理的核心,包含了多种处理器(如解码器、编码器、业务逻辑处理器等),数据从网络流进流出都会经过这个管道。 4. **注册端口**:通过`bootstrap.bind()`方法指定监听的端口,并启动服务。 ```java bootstrap.bind(8080).sync(); // 等待连接完成 ``` 5. **接收连接请求**:当有新的连接请求时,`ServerBootstrap`会创建一个新的`Channel`实例,将其加入到事件循环中处理读写操作。 6. **事件循环**:Netty使用的是非阻塞I/O模型,事件循环不断监控所有已打开的`Channel`,当它们准备好进行读写操作时,就触发相应的回调。 7. **处理消息**:在`ChannelInitializer`中配置的处理器会被依次调用,例如`EventExecutorGroup`负责处理IO操作,`Decoder`负责解析接收到的数据,`Encoder`负责将发送的数据打包。 8. **异常处理**:在整个过程中,如果有错误发生,Netty提供了优雅的错误处理机制,可以捕获并关闭通道,避免程序崩溃。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

”PANDA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值