最近一直在看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.初始化

初始化只做了两件事

  1. 将配置属性设置到channelConfig或者channel 中
  2. 加入新连接处理器

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. 校园网跑腿小程序源码 服务端+客户端+小程序

    介绍: 校园网跑腿小程序源码 需要准备 1.小程序 2.服务器(推荐配置2h4g3m) 3.域名(需要备案) 搭建教程 使用服务器搭建宝塔 安装pm2管理器 新建项目上传服务器接口 修改/pub/co ...

  2. 2021最新4合1即时通讯IM源码-服务端+PC+WEB+安卓+IOS完整原生源码

    介绍: 20214合1即时通讯IM源码 服务端+PC+WEB+安卓+IOS完整原生源码 附完整开发文档+视频搭建教程. 注意:此源码亲测可用,他处有小问题,我们已经修复.任何源码,难免有瑕疵,但不影响 ...

  3. java做h5小游戏服务端_神藏西游H5游戏源码服务端+客户端+搭建教程

    源码预览 源码介绍 教程如下: 1.cd / 把下载好的文件传到服务器根目录下面 2.打开Xshell 安装java 输入 sh sd 回车 输入1 回车 3.安装宝塔 输入 sh sd 回车 输入2 ...

  4. 怎样读 nacos 源码——服务端处理客户端注册解读

    一 nacos 代码结构 二 Controller 入口 三 注册入口 四 继续跟进 读源码方法: 1 Debug:生产环境无法 Debug,这个一般用于开发环境. 2 静态看源码:这个更重要,deb ...

  5. 热血传奇服务端FIR0918源码服务端Actor继承关系以及注解

    首先要声明一下,Fir0918服务端方面个人感觉实在是渣 代码各种乱入,写此博客只是记录自己学习的点滴.并不是来告诉大家fir的代码有多好. TBaseObject 只有四个成员 对象所在地图的X,Y ...

  6. Netty 源码解析系列-服务端启动流程解析

    netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...

  7. netty源码学习之服务端客户端初始化

    文章目录 1. AbstractBootstrap类简介 1.1. 核心方法 2. netty服务端创建 2.1. 服务端启动入口 2.2. doBind()方法 2.3. netty服务初始化 2. ...

  8. Netty源码分析系列之服务端Channel的端口绑定

    扫描下方二维码或者微信搜索公众号菜鸟飞呀飞,即可关注微信公众号,Spring源码分析和Java并发编程文章. 微信公众号 问题 本文内容是接着前两篇文章写的,有兴趣的朋友可以先去阅读下两篇文章: Ne ...

  9. Netty源码分析第1章(Netty启动流程)----第4节: 注册多路复用

    Netty源码分析第1章(Netty启动流程)---->第4节: 注册多路复用 Netty源码分析第一章:Netty启动流程   第四节:注册多路复用 回顾下以上的小节, 我们知道了channe ...

最新文章

  1. 详解Pytorch的nn.DataParallel
  2. QN8027输出调频分裂的频谱
  3. 新型超低功耗无线网卡诞生,一颗纽扣电池可撑数年
  4. php yield 递归,递归运行所有yield请求h的废弃输出文件
  5. hdfs oiv命令查看FsImage镜像文件内容
  6. C语言圈排序Cycle Sort算法(附完整源码)
  7. iview 级联选择组件_vue组件递归渲染实例
  8. android 弹出网格菜单,在android中的recyclerView中显示弹出按钮的确...
  9. vue配置git的子模块
  10. django权限系统实现步骤_在django中实现一个简单的权限管理
  11. 【雷达通信】基于matlab多普勒连续波测速【含Matlab源码 642期】
  12. web前端性能优化总结 1
  13. Python3.1 使用卡通头像网络模型生成卡通头像(基于GAN)
  14. 深入理解Eureka自我保护机制
  15. python ean13条形码的验证_在Matplotlib中显示EAN13条形码
  16. html5 mp4转换ogv格式,如何将mp4视频转换成ogv高清视频呢
  17. java使用ffmpeg将视频转码
  18. 抖音电商难做吗?为什么又累又卷还是做不好?
  19. 在线记录源码调试之@EnableAspectJAutoProxy与Spring AOP(三)调用被代理方法userServiceImpl.save(user)
  20. 计算机导论——计算机网络05

热门文章

  1. nfs漏洞修复(showmount -e)
  2. npm run dev 出现npm ERR!missing scrip:dev
  3. VirtualBox Nonexistent host networking interface 错误解决方案
  4. Service Mesh 和 API Gateway 关系深度探讨
  5. 4个最难的 Elastic Search 面试题
  6. Java对象的序列化与反序列化
  7. 人工智能是如何应用于智能交通领域
  8. Android --- 怎么把其他类型的数据转换成 Json 字符串
  9. WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.as
  10. android studio 执行不了,请问,Android studio程序不报错,但是一运行就stop是什原因...