netty源码详解

本文详细探讨了Netty服务端的启动过程,包括创建NioEventLoopGroup,配置并绑定端口,以及服务端启动的四个关键步骤。在启动过程中,Netty通过反射创建NioServerSocketChannel,初始化并注册到事件轮询器,最终实现对本地端口的监听。文章深入剖析了Netty如何封装和管理底层Channel,为理解Netty框架提供了宝贵的洞察。

netty源码详解

1、Netty服务端启动。

       首先创建两种类型的NioEventLoopGroup对象。

       ServerBootstrap()(空方法)。

2、通过group(),将两个线程配置进Channel。

3、端口的绑定。

bind()(入口),端口的绑定。

4、netty服务端启动分为4个过程。

           4.2、这个实际上是调用jdk底层的API,去创建jdk的Channel,然后netty封装成自己的Channel,同时创建基本组件,绑定在子Channel上面。

           4.3、netty会基于子Channel做一些初始化的工作,初始化基本属性,以及添加一些逻辑处理器。

           4.4、netty将底层的Channel注册到事件轮询器,selector上面,并把服务端的Channel作为, 绑定在对应在jdk底层服务端的Channel,这样的话,在后续有事件轮询出来之后,就可以直接拿到etxment,etxment就是netty封装jdk底层的Channel。

           4.5、调用jdk底层的API,对本地端口的监听。

这四个步骤完成后,netty服务端就启动完成了。

5、详细说明netty服务端启动过程。

            5.2、创建服务端Channel,首先从bind()代码开始,调用到initAndRegister(),调用netChannel(),通过newChannel创建服务端channel。

            5.3、bind()(服务端创建的入口)。

            5.4、initAndRegister()(创建服务端的channel)。

6、channelFactory在哪里初始化的?

           6.2、在channel(),把channelClass封装成一个ReflectiveChannelFactory,通过channelClass,通过反射的方式,去创建ReflectiveChannelFactory对象。

           6.3、channelClass就是传来的NioServerSocketChannel.class,通过反射调用这个类的构造函数。

7、接下来看NioServerSocketChannel类中的构造函数。

            7.2、newSocket(),进入NioServerSocketChannel类,查看NioServerSocketChannel构造函数。

            7.3、newSocket创建jdk底层的channel。

               7.4、provider调用jdk底层的openServerSocketChannel,去创建服务器端的channel。

                   7.5、返回了jdk底层创建的channels对象。

                      7.6、NioServerSocketChannelConfig()(tcp参数的配置类)。

                      7.7、将jdk创建完成的ServerSocketChannel 传进去作为这个NioServerSocketChannelConfig()的构造函数,这个config主要是后续对Channel的tcp底层进行获取。

 

                   7.8、调用父类的构造函数,第一个configureBlocking(false)。

                   7.9、ch就是newSocket()创建出来jdk底层的channel。

8、AbstactChannel(),服务端channel和客户端的channel都继承与AbstactChannel类,AbstactChannel就是对channel一个抽象,不管是服务端还是客户端的channel,都会有id,unsafe,pipeline三个属性(id对应的channel的唯一标识,unsafe就跟tcp的读写,底层的操作,pipeline跟服务端和客户端逻辑相关的链)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值