Netty 的服务启动流程1 Selector的创建 Ser

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

今天我们来了解一下Netty里面服务启动的过程,使用Netty你只需要半个小时,但是了解它你却需要很长时间,没关系,我相信这是值得的。

Selector的创建

首先是对服务器的一个配置,先是初始化了两个EventLoopGroup,这里就使用的是主从Reactor模型了,Netty起了两个很好的名字bossGroup和workerGroup。

image.png

这里就是这个selector的创建了。
image.png

selector是什么时候创建的呢?我们可以查看一下堆栈信息。

image.png

首先,服务是在52的位置启动,启动之后呢,初始化了这个NioEventLoopGroup,,然后到第142的位置的时候,初始化了一个NioEventLoop,之后Selector就被创建了。

ServerSocketChannel的创建

然后,绑定一个端口,开启服务,这步是一个同步过程,只有执行完,才能执行下一步。
image.png

这里进行校验,然后执行doBind方法,一般我们的doBind都是干活的方法,我们来看下。
image.png

这里有个初始化注册方法,我们点进去看下。
image.png

点进去之后呢是创建一个channel,我们看看创建之后有什么。
image.png

发现呢里面已经有一个ServerSocketChannel,就是说这个ServerSocketChannel已经被创建了,接着初始化这个Channel。
image.png

紧接着是注册,那么注册是干什么呢》注册就是把我们的这个ServerSocketChannel注册到我们的这个NioEventLoopGroup里面的这个Selector上。

image.png

注册这里面用到了一个选择,next是表示选择,里面有两种实现,先不讲了。
image.png

然后是register方法
image.png
然后,我们回到原来的方法,返回值是个Future,说明是个异步过程,写不完了有点。

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%