Netty4.x 源码实战系列(三):NioServerSocketChannel全剖析_netty中为什么要将nioserversocketchannel作为附件绑定到socketchan-程序员宅基地

技术标签: java  源码分析  netty4  网络编程  

根据上一篇《Netty4.x 源码实战系列(二):服务端bind流程详解》所述,在进行服务端开发时,必须通过ServerBootstrap引导类的channel方法来指定channel类型, channel方法的调用其实就是实例化了一个用于生成此channel类型对象的工厂对象。 并且在bind调用后,会调用此工厂对象来生成一个新channel。

本篇将通过NioServerSocketChannel实例化过程,来深入剖析NioServerSocketChannel。

在开始代码分析之前,我们先看一下NioServerSocketChannel的类继承结构图:
这里写图片描述

调用工厂完成NioServerSocketChannel实例的创建

在绑定侦听端口过程中,我们调用了AbstractBootstrap的initAndRegister方法来完成channel的创建与初始化,channel实例化代码如下:

channelFactory.newChannel()

而channelFactory对象是我们通过ServerBootstrap.channel方法的调用生成的

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

通过代码可知,此工厂对象是ReflectiveChannelFactory实例

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;
    }

    @Override
    public T newChannel() {
        try {
            return clazz.getConstructor().newInstance();
        } 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wbbhao/article/details/78943624

智能推荐

约束布局ConstraintLayout看这一篇就够了-程序员宅基地

文章浏览阅读4.2k次,点赞3次,收藏3次。真的很有必要学习约束布局和它的辅助布局,因为它可以做出很多好看的效果,且性能高;比如这个ConstraintHelper,效果如下图所示:喜欢的可以继续往下看,不夸张的说,约束布局和其辅助布局的相关的这里都有,而且很详细;引入androidx的constraintlayout的lib相对定位基本定位属性如下表,意思好比就是那一条边和那一条边对齐,比如设置B控件的属性 layout_constraintLeft_toLeftOf=“@id/A”就表示B控件的左边对齐A控件的左边,会收到这个约束。_constraintlayout

远程连接MySQL数据库服务器-程序员宅基地

文章浏览阅读115次。上文说到《[url=http://ricki.iteye.com/blog/772886]局域网内访问tomcat服务器[/url]》,主要是想在会议室内远程访问tomcat服务器,不过在演示的时候需要跑JBPM4.4官方实例的junit test,所以当把jbpm.hibernate.cfg.xml改为具体的IP地址后,会报该IP无法连接数据库服务器。 对此,以root..._客户端如何远程登录连接mysql数据库服务器,以实现远程操作mysql数据库? ( site:blog.csdn.net

#define PINT int*与typedef int *SINT的区别._c语言 sint-程序员宅基地

文章浏览阅读576次。#define PINT int* #define是预处理指令,简单的宏定义,在编译预处理时进行简单的替换,不作正确性检查,不管含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。①#define PINT int*是,在预处理阶段就已经将PINT替换为int*了,它与int *不等价②如果有PINT a,b; //实际就是 int* a,b; _c语言 sint

JS_数据结构——字典与哈希表_js 声明一个空哈希表-程序员宅基地

文章浏览阅读272次。字典,顾名思义,就是由键:值对的形式进行存储一些值,同现实生活中,每个键对应的值是唯一的,这样才能做到精确查找某值。利用字典,我们可以快速得到键所对应的值,大大方便了我们查找某项数据。在js中,字典的实现和对象十分相似,因为对象在字典中也是采用属性值:属性名的方式进行存储,接下来看一下我所实现的字典吧~var Dictionary=function(){ var items={} //创建一个空字典 this.has=function(key) /_js 声明一个空哈希表

浙江大学计算机与软件学院2021年考研复试上机模拟练习_浙江大学计算机考研复试上机-程序员宅基地

文章浏览阅读533次。文章目录7-1 Square Friends (20 分)7-2 One Way In, Two Ways Out (25 分)7-3 Preorder Traversal (25 分)7-4 Load Balancing (30 分)7-1 Square Friends (20 分)#include <iostream>#include <deque>#include <vector>#include <climits>#include <_浙江大学计算机考研复试上机

tsp问题的拓展_TSP(旅行者问题)——动态规划详解(转)-程序员宅基地

文章浏览阅读2k次。1.问题定义TSP问题(旅行商问题)是指旅行家要旅行n个城市,要求各个城市经历且仅经历一次然后回到出发城市,并要求所走的路程最短。假设现在有四个城市,0,1,2,3,他们之间的代价如图一,可以存成二维表的形式 图一现在要从城市0出发,最后又回到0,期间1,2,3都必须并且只能经过一次,使代价最小。2.动态规划可行性设s, s1, s2, …, sp, s是从s出发的一条路径长度最短的..._游乐园tsp问题

随便推点

SpringMVC:用MultipartFile上传单个文件,多个文件_apache multipartfile-程序员宅基地

文章浏览阅读4w次,点赞11次,收藏52次。单个文件上传开发步骤:1.添加Apache文件上传jar包首先需要下载两个apache上传文件的jar包 commons-fileupload-1.3.1.jar commons-io-2.4.jar 具体使用版本,请根据项目进行选择。 2.配置MultipartResolver处理文件SpringMVC 用的是 的MultipartFile来进行文件上传 所以_apache multipartfile

基于STM32使用超声波HC-SR04模块-程序员宅基地

文章浏览阅读1.2w次,点赞22次,收藏116次。写在前面注意的几点: 1、HC-SR04模块必须使用5V供电,不能是3.3V 2、若单是测距,无需使用中断 3、Echo和Trig两个引脚可以任意接可用的GPIO,和定时器无关说一下超声波的工作原理 单片机给Trig引脚一个最少10us的高电平,然后拉低引脚,便启动了模块, 然后超声波就被发了出去,超声波遇到障碍物后返回被模块接收,Echo引脚会输出一段高电平,高电平的时间与距离成比例

Visual studio C++ MFC之点击按钮(菜单栏)生成新窗口-程序员宅基地

文章浏览阅读899次。背景当前做的APP有菜单栏,菜单栏有一项需要对下位机相关参数进行设置,则必须弹出一个窗口来实现设置操作。本篇即对点击菜单栏生成新的窗口,在新的窗口内完成相应计划后结束新窗口并返回原窗口的方法进行简述。菜单栏的实现可见另一篇博客Visual studio C++ MFC之Menu editor。正文创建一个新窗口在资源视图右击添加Dialog资源,会生成一个新的Dialog,该Dialog..._c++点按钮打开新窗口

「小白经验」浅谈“技术层面-理论层面”_论文中的技术层面是指什么-程序员宅基地

文章浏览阅读1.9k次。今天汇报的时候,被师兄dis了。一句话说的我牙口无言:你是在给我讲科普啊?这一课,让我明白了什么叫作:技术-理论汇报。技术层面看技术性网站、贴吧、论坛。理论层面看学术论文。回首一望那些年,果然是一直停留在技术层面学习,而没有进入理论研究。哪个更总要?哪个都重要。但,就研究生阶段而言,学术研究大于技术学习。因为:技术层是给别人打工的,而理论层是指挥别人工作的。你讲的理论,..._论文中的技术层面是指什么

java数组实现选择排序_java定义一个数组用选择排序排序的方法-程序员宅基地

文章浏览阅读707次。选择排序(Selection sort)是一种简单直观的排序算法。定义一个int类型无序的数组int[] nums = new int[]{3,5,2,6,7,8,1};定义一个int类型的 min ,用来存储每次比对的最小值int min = 0;嵌套循环数组因为是第一个元素比对后面的元素,所以第一个循环 i < 数组长度 -1第二个循环是取出下一个元素进行比对,所以 j = i + 1判断下一个元素是否小于上一个元素,是,则将该元素的索引赋给min进行记录 _java定义一个数组用选择排序排序的方法

flink+kafka+doris+springboot集成例子_springboot doris-程序员宅基地

文章浏览阅读2.2k次。1、springboot基于netty编写接收程序。_springboot doris

推荐文章

热门文章

相关标签