2021SC@SDUSC

文章目录

  • bootstrap的设置剖析
  • 其他

bootstrap的设置剖析

bootstrap.group(bossGroup, workerGroup)//设置两个线程组.channel(NioServerSocketChannel.class)//使用NioSocketChannel作为服务器通道实现.option(ChannelOption.SO_BACKLOG, 128)//设置线程队列得到连接个数.childOption(ChannelOption.SO_KEEPALIVE, true)//设置保持活动连接状态.childHandler(new ChannelInitializer<SocketChannel>() {//创建一个通道测试对象(匿名对象)//给pipeline设置处理器@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new NettyServerHander());}});//给我们的workerGroup的EventLoop对应的管道设置处理器

首先是.group(bossGroup, workerGroup)

public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup) {super.group(parentGroup);if (childGroup == null) {throw new NullPointerException("childGroup");}if (this.childGroup != null) {throw new IllegalStateException("childGroup set already");}this.childGroup = childGroup;return this;}public B group(EventLoopGroup group) {if (group == null) {throw new NullPointerException("group");}if (this.group != null) {throw new IllegalStateException("group set already");}this.group = group;return self();}

将两个线程组储存成(parent)group 和childGroup。
然后 .channel(NioServerSocketChannel.class)

public B channel(Class<? extends C> channelClass) {if (channelClass == null) {throw new NullPointerException("channelClass");}return channelFactory(new ReflectiveChannelFactory<C>(channelClass));}

这里用NioServerSocketChannel的反射创建了ReflectiveChannelFactory【反射通道工厂】
ReflectiveChannelFactory类和channelFactory方法分别是

public class ReflectiveChannelFactory<T extends Channel> implements ChannelFactory<T> {private final Class<? extends T> clazz;public ReflectiveChannelFactory(Class<? extends T> clazz) {if (clazz == null) {throw new NullPointerException("clazz");}this.clazz = clazz;}@Overridepublic T newChannel() {try {return clazz.getConstructor().newInstance();} catch (Throwable t) {throw new ChannelException("Unable to create Channel from class " + clazz, t);}}@Overridepublic String toString() {return StringUtil.simpleClassName(clazz) + ".class";}
}public B channelFactory(ChannelFactory<? extends C> channelFactory) {if (channelFactory == null) {throw new NullPointerException("channelFactory");}if (this.channelFactory != null) {throw new IllegalStateException("channelFactory set already");}this.channelFactory = channelFactory;return self();}

ReflectiveChannelFactory是通过反射调用默认构造函数来实例化新通道的ChannelFactory。channelFactory是设置了channelFactory[通道工厂],然后返回自身,以便于后边的链式设置
.option(ChannelOption.SO_BACKLOG, 128).childOption(ChannelOption.SO_KEEPALIVE, true)

public <T> B option(ChannelOption<T> option, T value) {if (option == null) {throw new NullPointerException("option");}if (value == null) {synchronized (options) {options.remove(option);}} else {synchronized (options) {options.put(option, value);}}return self();}public <T> ServerBootstrap childOption(ChannelOption<T> childOption, T value) {if (childOption == null) {throw new NullPointerException("childOption");}if (value == null) {synchronized (childOptions) {childOptions.remove(childOption);}} else {synchronized (childOptions) {childOptions.put(childOption, value);}}return this;}

设置线程队列得到连接个数,返回自身,设置保持活动连接状态。.childHandler()

.childHandler(new ChannelInitializer<SocketChannel>() {//创建一个通道测试对象(匿名对象)//给pipeline设置处理器@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new NettyServerHander());}});public ServerBootstrap childHandler(ChannelHandler childHandler) {if (childHandler == null) {throw new NullPointerException("childHandler");}this.childHandler = childHandler;return this;}

其实也就设置childHandler

其他

// 启动服务器。并绑定端口ChannelFuture cf = bootstrap.bind(6668).sync();//对关闭通道进行监听cf.channel().closeFuture().sync();

然后就是bind()方法,其中关键的代码流程大概是bind→dobind→initAntRegister→init→register→execute→startThread→doStartThread→run;同时还会根据注册结果绑定一个监听。

Nett源码剖析ServerBootstrap的设置2021SC@SDUSC相关推荐

  1. Nett源码剖析(1)NioEventloopGroup的创建2021SC@SDUSC

    2021SC@SDUSC 文章目录 NioEventloopGroup new NioEventLoopGroup(): 核心 NioEventloopGroup 类结构图: 很遗憾我的idea不是旗 ...

  2. Nett源码剖析(2)NioEventloopGroup的创建2021SC@SDUSC

    2021SC@SDUSC 文章目录 new ThreadPerTaskExecutor(newDefaultThreadFactory()); newchild 上文说到这里是NioEventloop ...

  3. Nett源码剖析注册通道2021SC@SDUSC

    2021SC@SDUSC 在绑定端口过程中,类initAndRegister里有注册通道方法ChannelFuture regFuture = config().group().register(ch ...

  4. Zbar源码解析——实现中文解码|2021SC@SDUSC

    2021SC@SDUSC 修改文件 zbar/qrcode/qrdectxt.c: latin1_cd=iconv_open("GB18030","UTF-8" ...

  5. 山东大学软件实验课程-Ebiten-基于go语言实现的2D游戏库源码分析第一篇-综述 2021SC@SDUSC

    2021SC@SDUSC 目录 一.项目综述 二.go语言安装及环境配置 1.Go的安装 2.IDE的使用 三.小组内成员分工 一.项目综述 Ebiten 是Go 编程语言的开源游戏库.Ebiten ...

  6. Qt之布局设置setLayout详解-源码剖析(下)

    一.简述 大家好,我是前行中的小猪,今天呢给大家继续上一篇Qt之布局设置setLayout详解(上)之后的内容,再给大家进行一下拓展. 1.1 setLayout源码剖析 上篇我们说到如何清空部件上的 ...

  7. 源码剖析 Netty 服务启动 NIO

    如果这个文章看不懂的话 , 建议反复阅读 Netty 与 Reactor 开篇立意.引用网友好的建议.看源码要针对性的看,最佳实践就是,带着明确的目的去看源码.抓主要问题,放弃小问题.主要的逻辑理解了 ...

  8. Netty服务器启动源码剖析

    Netty服务器启动源码剖析 文章目录 Netty服务器启动源码剖析 1.Netty服务器启动源码剖析 1.1.执行new NioEventLoopGroup()时发生了什么 1.1.1.NioEve ...

  9. 老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 1...

    老李推荐:第14章4节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-端口转发 在初始化HierarchyViewer的实例过程中, ...

最新文章

  1. java中json重复数据结构_JS实现去除数组中重复json的方法示例
  2. 中科院分子细胞中心、清华大学和Bio-protocol联手发布《高通量筛选实验手册》...
  3. 聊聊clean code
  4. python的learn_python_learn1
  5. 一些常见的兼容性问题
  6. EXCEL下载功能在XP系统中运行是好好的,到windows2003系统上,就报错
  7. java 数据库备份 linux,java邮件打包在linux备份数据库练习
  8. python自定义配置文件读取_python读取和自定义配置文件的方法
  9. layer 一张表按钮根据一个id 查询相关信息
  10. linux暂停和恢复进程
  11. 计算机编程培训莱阳,莱阳数控编程培训班
  12. 漂浮式半潜风机(二)环境荷载
  13. x32下PsSetLoadImageNotifyRoutine的逆向
  14. 分析数据流和绘制数据流图
  15. idea更新报Node remains in conflict冲突的解决办法
  16. ae镜头光晕插件Optical Flares
  17. 技术交流:springboot配置阿里云日志服务与log4j2 lookup
  18. 九种引人瞩目的开源大数据技术
  19. 怎么修改手机app服务器数据库,手机app服务器数据库
  20. struct sk_buff结构体详解

热门文章

  1. FPGA-基于UART的QVGA显示(一)(实现PC端发送字母数字汉字的分别显示)
  2. [012量化交易] python 最高价 最低价
  3. 金字塔(算法竞赛进阶指南)
  4. 安徽省计算机应用能力考试证书,合肥信息技术职业学院1084名学子成功获得了全国信息化应用能力考试合格证书...
  5. my web sites for HEP
  6. Web3 哪个赛道最有机会?带你详解Web3基础设施赛道的“超级项目”
  7. for example: not eligible for auto-proxying 解决
  8. 唐诗宋词学习·141~145节
  9. BAV99的ESD保护作用解析
  10. .NET的资源并不限于.resx文件(二)