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

一、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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值