Netty源码分析(一) --- Server/Client启动流程,建立连接和Read剖析

本文深入分析Netty的源码,从服务端和客户端的启动流程,到Server和Client如何建立连接和Read过程。通过NioEventLoopGroup、ServerBootStrap和bind方法理解Netty的内部工作机制,详细阐述了ServerBootstrap的配置、bind操作、ChannelFuture的绑定过程以及客户端的connect步骤。最后总结了服务端和客户端启动的核心流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Netty源码分析

https://github.com/netty/netty/tree/4.1/example/src/main/java/io/netty/example/echo

上找到echo这个example

1.1 服务端启动流程

1.1.1 两个NioEventLoopGroup

服务端代码首先要定义两个NioEventLoopGroup,打个断点进去

image-20220325200803748

NioEventLoopGroup继承MultithreadEventLoopGroup,加载的时候执行父类静态方法,初始化DEFAULT_EVENT_LOOP_THREADS = cpu核数 * 2

image-20220325201052312

如果是无参构造就让默认children线程为12个,而bossgroup是有参,只有1个线程,workergroup就是12个线程。这些线程就是事件循环组

image-20220325201358502

这个过程中还会生成一个Selector多路复用器的Provider,供之后生成Selector使用,是由操作系统决定的,Windows下就是WindowsSelectorProvider

image-20220325202422160

这个位置就是生成children线程的地方,生成完之后为每个线程加上结束回调监听器

image-20220325201925903 image-20220325203150711

1.1.2 ServerBootStrap

接下来在ServerBootStrap那打个断点

image-20220325203356933

进去看看,加载ServerBootstrap会先加载AbstractBootstrap,声明了一堆变量,实际上都没初始化,留给后面链式编程添加属性

image-20220325204818583

然后针对链式编程进行断点研究

image-20220325205015134

group(bossGroup,workerGroup):将bossgroup赋给group,workergroup赋给childgroup

image-20220325205152428

channel(NioServerSocketChannel.class):用反射创建一个ChannelFactory,为之后创建NioServerSockerChannel提供一个工厂

image-20220325205545132

option(ChannelOption.SO_BACKLOG, 100):添加一些TCP参数,可以看到是放进options这个Li

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值