菜鸡学习netty源码(一)——ServerBootStrap启动

1.概述

对于初学者而然,写一个netty本地进行测试的Server端和Client端,我们最先接触到的类就是ServerBootstrap和Bootstrap。这两个类都有一个公共的父类就是AbstractBootstrap.

那既然 ServerBootstrap和Bootstrap都有一个公共的分类,那就证明它们两个肯定有很多公共的职责和方法。

AbstractBootStrap

我们先进行来看AbstractBootStrap这个类

构造函数

public abstract class AbstractBootstrap<B extends AbstractBootstrap<B, C>, C extends Channel> implements Cloneable {volatile EventLoopGroup group;@SuppressWarnings("deprecation")private volatile ChannelFactory<? extends C> channelFactory;private volatile SocketAddress localAddress;private final Map<ChannelOption<?>, Object> options = new LinkedHashMap<ChannelOption<?>, Object>();private final Map<AttributeKey<?>, Object> attrs = new LinkedHashMap<AttributeKey<?>, Object>();private volatile ChannelHandler handler;AbstractBootstrap() {// Disallow extending from a different package.}AbstractBootstrap(AbstractBootstrap<B, C> bootstrap) {group = bootstrap.group;channelFactory = bootstrap.channelFactory;handler = bootstrap.handler;localAddress = bootstrap.localAddress;synchronized (bootstrap.options) {options.putAll(bootstrap.options);}synchronized (bootstrap.attrs) {attrs.putAll(bootstrap.attrs);}}............. //省略别的代码
}

从上面的代码 我们可以看出来几点:

1.AbstractBootStrap这个抽象类定义B,C两个泛型,B泛型继承了AbstractBootStrap这个类,C泛型继承于Channel这个类

2.提供了两个构造函数,一个是无参的 一个是有参的,有参的构造函数中,有两行synchronized 进行修饰的代码,是options和attrs属性可能会有并发问题吗?

3.实现了Cloneable接口,这个Cloneable接口在java中表示这个类是否可以被克隆,我对此有这个疑问,为啥要实现这个接口呢 

看完AbstractBootStrap的这个构造函数,我们一起看下ServerBootstrap和Bootstrap在我们写的demo中都涉及到一些方法,

group方法

   public B group(EventLoopGroup group) {ObjectUtil.checkNotNull(group, "group");if (this.group != null) {throw new IllegalStateException("group set already");}this.group = group;return self();}

 这个group方法看上去就是一个简单的属性赋值的操作,并没有什么特别之处,跟咱们普通的set方法的区别在于最后调用了self方法,但是我们看下self方法之后,就是返回了一个自身的对象。

    private B self() {return (B) this;}

channel方法

    public B channel(Class<? extends C> channelClass) {return channelFactory(new ReflectiveChannelFactory<C>(ObjectUtil.checkNotNull(channelClass, "channelClass")));}

这块就跟group方法不一样了,看上去不再是简单的属性赋值了,我们点击到channelFactory方法中进行查看。心想着总该不一样了,但是点击进去还是属性赋值的操作,但是这次属性赋值有点区别了,是根据传入的channelClass的Class对象 构建了一个ReflectiveChannelFactory对象

  public B channelFactory(io.netty.channel.ChannelFactory<? extends C> channelFactory) {return channelFactory((ChannelFactory<C>) channelFactory);}public B channelFactory(ChannelFactory<? extends C> channelFactory) {ObjectUtil.checkNotNull(channelFactory, "channelFactory");if (this.channelFactory != null) {thr

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/7400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis集群.md

Redis集群 本章是基于 CentOS7 下的 Redis 集群教程&#xff0c;包括&#xff1a; 单机安装RedisRedis主从Redis分片集群 1.单机安装Redis 首先需要安装Redis所需要的依赖&#xff1a; yum install -y gcc tcl然后将课前资料提供的Redis安装包上传到虚拟机的任意目录&#xf…

如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Java双亲委派机制

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 概述 Java程序在运…

一起长锈:4 默认不可变的变量绑定与引用(从Java与C++转Rust之旅)

讲动人的故事,写懂人的代码 故事梗概:在她所维护的老旧Java系统即将被淘汰的危机边缘,这位在编程中总想快速完事的女程序员,希望能转岗到公司内部使用Rust语言的新项目组,因此开始自学Rust;然而,在掌握了Rust编程知识之后,为了通过Rust项目组的技术面试,使得转岗成功而…

sql优化思路

sql的优化经验 这里解释一下SQL语句的优化的原理 1.指明字段名称&#xff0c;可以尽量使用覆盖索引&#xff0c;避免回表查询&#xff0c;因此可以提高效率 2.字面意思&#xff0c;无需过多赘述。索引就是为了提高查询效率的。 3.图中两条sql直接可以使用union all 或者 uni…

羊大师分解,羊奶不为人知的健康奇迹

羊大师分解&#xff0c;羊奶不为人知的健康奇迹 羊奶是一种营养丰富的食品&#xff0c;拥有许多不为人知的健康益处。 益智健脑&#xff1a;羊奶中含有较高的钙、蛋白质、氨基酸、维生素、矿物质、无机盐、核酸等营养成分&#xff0c;这些都对大脑发育及增强智力有很大帮助。…

MySQL mydumper工具

目录 1. mydumper介绍 2. mydumper参数解释 3. 备份例子 3.1 备份全库(未包含其他) 3.2 备份全库(包含其他) 3.3 备份指定数据库(-B或--database) 3.4 导出指定表(-T或--tables-list) 3.5 只导出表结构&#xff0c;不导出表数据(-d或--no-data) 3.6 只导出表数据&#…

包管理工具npm的安装和使用

包管理工具 管理 包 的应用软件&#xff0c;可以对 包 进行下载 安装&#xff0c;更新&#xff0c;删除&#xff0c;上传 等操作。 借助包管理工具&#xff0c;可以快速开发项目&#xff0c;提升开发效率。 包管理工具是一个通用的概念&#xff0c;很多编程语言都有包管理工…

likeshop多商户单商户商城_likeshop跑腿源码_likeshop物品租赁系统开源版怎么配置小程序对接?

本人是商业用户所以能持续得到最新商业版&#xff0c;今天我说下likeshop里面怎么打包小程序&#xff0c;大家得到程序时候会发现它有admin目录 app目录 server目录 这三个目录分别是做什么呢&#xff1f; 1.admin目录 下面都是架构文件使用得是Node.js打包得&#xff0c;至于…

管道通信与Linux命令的执行-(读书笔记-十三)

|前一个命令的输出作为后一个命令的输入。 在Linux中&#xff0c;|符号是一个管道符号&#xff0c;用于将前一个命令的输出作为后一个命令的输入。这种机制允许你将多个命令组合在一起&#xff0c;以执行复杂的操作。下面是一些基本的例子&#xff1a; 查看当前目录下的文件列…

数据互通新纪元,企业如何实现系统无缝对接?

一、客户介绍 某文化发展有限公司&#xff0c;是一家在二次元文化领域深耕的领先企业&#xff0c;自成立以来&#xff0c;始终致力于为广大二次元爱好者提供丰富多样的正版衍生品和独特的文化体验。作为一家专注于二次元周边产品的公司&#xff0c;该公司拥有全面的产品线&…

网站访问免费升级成 HTTPS——值得收藏

实现HTTPS协议可以分为四个主要步骤&#xff0c;以确保网站数据传输的安全性。以下是简明清晰的流程概述&#xff1a; 1. 申请SSL证书 - SSL证书是实现HTTPS的基础&#xff0c;它包含了网站的身份信息以及公钥等。首先&#xff0c;你需要从受信任的证书颁发机构(CA)申请一个SSL…

新建的springBoot WEB项目无法自动返回html模版(gradle+kotlin版本)

最近研究了springBoot创建web项目&#xff0c; 第一步服务端返回字符串没有问题&#xff0c;第二步返回html时&#xff0c;还是返回的字符串。 文章目录 一、参考方案二、新建springBoot web项目三、启动项目的三种方式 一、参考方案 将控制器类的 RestController 改为 Contro…

Listview控件的5种视图

在C#中&#xff0c;ListView控件是用于显示和编辑列表数据的常用控件。它可以显示数据项的列表&#xff0c;并允许用户对列表中的数据进行操作。 ListView控件有五种视图模式&#xff0c;分别是&#xff1a; LargeIcon视图&#xff1a;在此视图中&#xff0c;每个数据项都显示…

如何剪辑视频中不想要的片段?教你轻松剪辑

如何剪辑视频中不想要的片段&#xff1f;在视频编辑的精湛艺术中&#xff0c;精确剪辑掉不想要的片段无疑是提升视频品质和专业水准的关键一环。技术的进步使我们得以借助多种高效、易用的视频剪辑软件&#xff0c;轻松去除冗余&#xff0c;保留精华&#xff0c;从而创作出更加…

大模型模型简化机器人训练;简单易用的 3D 工具Project Neo;特斯拉放出了擎天柱机器人最新训练视频

✨ 1: DrEureka 利用大语言模型自动化将机器人仿真环境训练结果转移到真实世界 DrEureka是一种利用大型语言模型&#xff08;LLMs&#xff09;自动化和加速从仿真&#xff08;sim&#xff09;到现实世界&#xff08;real&#xff09;转移的技术。在机器人技能学习领域&#x…

使用socat 做端口转发 调试设备

使用 socat 监听设备的端口&#xff0c;转发到PC的 一个sniff 程序上&#xff0c;查看wireshark 或者直接用 scapy 进行分析 有了socat 也可以做 nat 映射

MySQL mysqldump备份恢复

目录 1. 备份类型 2. 逻辑备份VS物理备份 3. mysqldump工具 3.1 备份命令格式 3.2 备份选项 3.3 备份全库(结构和数据) 3.4 备份全库(仅结构) 3.5 备份全库(仅数据) 3.6 备份单个数据库(结构和数据) 3.7 备份单个数据库(仅结构) 3.8 备份单个数据库(仅数据) 3.9…

低代码系统能够解决哪些痛点?

不同的应用场景下&#xff0c;低代码系统解决的痛点是不一样的。工业应用场景中的组态软件应该说是最早的低代码系统了。以 Topstack 为代表的Web 组态软件&#xff0c;其核心功能设备数据采集、图形监控画面、数据报表、数据看板、业务逻辑开发等&#xff0c;都是无代码或低代…

个人出租房屋收入需汇算吗?柯桥会计培训

2023年度个人所得税综合所得汇算清缴正在进行&#xff0c;个人出租房屋的收入需并入汇算清缴吗&#xff1f;汇算最后一步显示免申报是什么意思&#xff1f; 1 个人出租房屋的收入需并入汇算清缴吗&#xff1f; 答&#xff1a;不用。根据《国家税务总局关于办理2023年度个人所…