前言:为了让大家对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