Netty源码 服务端的启动
最近一直在看netty,看完之后就想做点笔记。可是实在是太忙了,挤了还要几个晚上终于挤出来了
上图是服务端的实例代码。大致的流程先梳理一遍。
首先会执行 用于创建两个线程组,boosGroup用于接受外部连接,对 SelectionKey.OP_ACCEPT 感兴趣
,workGroup用于处理io操作,内部,每当有新连接进来的时候boosGroup 都会把连接封装成一个channel 交给workGroup 去处理。
我们再看 NioEventLoopGroup 的构造方法,一直点进去,实际上调用的 MultithreadEventExecutorGroup
可以看到 这两行代码实际就是创建两个包含 NioEventLoop 对象的数组。NioEventLoop对象我们后面介绍。
ServerBootstrap 是一个辅助类,主要用于设置各种配置参数,
.group(bossGroup, workerGroup)
就是上面我们创建的两个线程组,bossGroup
的作用就是不断地accept到新的连接,将新的连接丢给workerGroup
来处理
.channel(NioServerSocketChannel.class)
表示服务端启动的是nio相关的channel,channel在netty里面是一大核心概念,可以理解为一条channel就是一个连接或者一个服务端bind动做
.childHandler(new ChannelInitializer<SocketChannel>)
表示一条新的连接进来之后,该怎么处理
上面的几行代码都是做相应配置。
真正的关键在于bind方法
我们一路点击进去。这个干了三件事 初始化,注册,绑定端口。
我们先看 initAndRegister
总共三步,创建channel,初始化,注册。
1.创建 反射调用,这里的clazz是在中设置的,所以这里创建出的是NioServerSocketChannel
2.初始化
初始化只做了两件事
- 将配置属性设置到channelConfig或者channel 中
- 加入新连接处理器
p.addLast()
向serverChannel的流水线处理器中加入了一个 ServerBootstrapAcceptor
,从名字上就可以看出来,这是一个接入器,专门接受新请求,把新的请求扔给某个事件循环器
3.注册
将该条channel
绑定到一个selector
上去,一个selector被一个reactor线程使用,后续该channel
的事件轮询,以及事件处理,异步task执行都是由此reactor线程来负责
现在我们的channel
已经和reactor
线程绑定在一起了,现在就剩下最后一步了,完成端口的绑定。
netty通过异步线程的方式完成端口绑定,这段代码比较难找,最终会来到 io.netty.channel.DefaultChannelPipeline.HeadContext#bind
最终调到了jdk里面的bind方法,这行代码过后,正常情况下,就真正进行了端口的绑定。
转载于:https://www.cnblogs.com/xmzJava/p/9425440.html
Netty源码 服务端的启动相关推荐
- 校园网跑腿小程序源码 服务端+客户端+小程序
介绍: 校园网跑腿小程序源码 需要准备 1.小程序 2.服务器(推荐配置2h4g3m) 3.域名(需要备案) 搭建教程 使用服务器搭建宝塔 安装pm2管理器 新建项目上传服务器接口 修改/pub/co ...
- 2021最新4合1即时通讯IM源码-服务端+PC+WEB+安卓+IOS完整原生源码
介绍: 20214合1即时通讯IM源码 服务端+PC+WEB+安卓+IOS完整原生源码 附完整开发文档+视频搭建教程. 注意:此源码亲测可用,他处有小问题,我们已经修复.任何源码,难免有瑕疵,但不影响 ...
- java做h5小游戏服务端_神藏西游H5游戏源码服务端+客户端+搭建教程
源码预览 源码介绍 教程如下: 1.cd / 把下载好的文件传到服务器根目录下面 2.打开Xshell 安装java 输入 sh sd 回车 输入1 回车 3.安装宝塔 输入 sh sd 回车 输入2 ...
- 怎样读 nacos 源码——服务端处理客户端注册解读
一 nacos 代码结构 二 Controller 入口 三 注册入口 四 继续跟进 读源码方法: 1 Debug:生产环境无法 Debug,这个一般用于开发环境. 2 静态看源码:这个更重要,deb ...
- 热血传奇服务端FIR0918源码服务端Actor继承关系以及注解
首先要声明一下,Fir0918服务端方面个人感觉实在是渣 代码各种乱入,写此博客只是记录自己学习的点滴.并不是来告诉大家fir的代码有多好. TBaseObject 只有四个成员 对象所在地图的X,Y ...
- Netty 源码解析系列-服务端启动流程解析
netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...
- netty源码学习之服务端客户端初始化
文章目录 1. AbstractBootstrap类简介 1.1. 核心方法 2. netty服务端创建 2.1. 服务端启动入口 2.2. doBind()方法 2.3. netty服务初始化 2. ...
- Netty源码分析系列之服务端Channel的端口绑定
扫描下方二维码或者微信搜索公众号菜鸟飞呀飞,即可关注微信公众号,Spring源码分析和Java并发编程文章. 微信公众号 问题 本文内容是接着前两篇文章写的,有兴趣的朋友可以先去阅读下两篇文章: Ne ...
- Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用
Netty源码分析第1章(Netty启动流程)---->第4节: 注册多路复用 Netty源码分析第一章:Netty启动流程 第四节:注册多路复用 回顾下以上的小节, 我们知道了channe ...
最新文章
- 详解Pytorch的nn.DataParallel
- QN8027输出调频分裂的频谱
- 新型超低功耗无线网卡诞生,一颗纽扣电池可撑数年
- php yield 递归,递归运行所有yield请求h的废弃输出文件
- hdfs oiv命令查看FsImage镜像文件内容
- C语言圈排序Cycle Sort算法(附完整源码)
- iview 级联选择组件_vue组件递归渲染实例
- android 弹出网格菜单,在android中的recyclerView中显示弹出按钮的确...
- vue配置git的子模块
- django权限系统实现步骤_在django中实现一个简单的权限管理
- 【雷达通信】基于matlab多普勒连续波测速【含Matlab源码 642期】
- web前端性能优化总结 1
- Python3.1 使用卡通头像网络模型生成卡通头像(基于GAN)
- 深入理解Eureka自我保护机制
- python ean13条形码的验证_在Matplotlib中显示EAN13条形码
- html5 mp4转换ogv格式,如何将mp4视频转换成ogv高清视频呢
- java使用ffmpeg将视频转码
- 抖音电商难做吗?为什么又累又卷还是做不好?
- 在线记录源码调试之@EnableAspectJAutoProxy与Spring AOP(三)调用被代理方法userServiceImpl.save(user)
- 计算机导论——计算机网络05
热门文章
- nfs漏洞修复(showmount -e)
- npm run dev 出现npm ERR!missing scrip:dev
- VirtualBox Nonexistent host networking interface 错误解决方案
- Service Mesh 和 API Gateway 关系深度探讨
- 4个最难的 Elastic Search 面试题
- Java对象的序列化与反序列化
- 人工智能是如何应用于智能交通领域
- Android --- 怎么把其他类型的数据转换成 Json 字符串
- WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.as
- android studio 执行不了,请问,Android studio程序不报错,但是一运行就stop是什原因...