netty源码分析(一)-启动

2023-11-05

对于netty的理解,首先要熟悉NIO相关的概念,可以参考学习这里:Java NIO

以NioServerSocket实现为例,netty的启动过程分析:

netty的启动入口,我们一般会这样配置:

    ChannelFactory serverChannelFacory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool());
    ServerBootstrap bootstrap =  new ServerBootstrap(serverChannelFacory);
    bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
        @Override
        public ChannelPipeline getPipeline() throws Exception {
            ChannelPipeline pipeline = Channels.pipeline();
            pipeline.addLast("decoder", new HttpRequestDecoder());
            pipeline.addLast("encoder", new HttpResponseEncoder());
            pipeline.addLast("handler", new YourHandler());
            return null;
        }
    });
    bootstrap.bind(new InetSocketAddress(8080));//启动入口

很明显,入口自然就是bootstrap.bind(),bind方法内会处理下面一部分主要的操作

    public Channel bind(final SocketAddress localAddress) {
        ......
        ChannelHandler binder = new Binder(localAddress, futureQueue);
        ChannelHandler parentHandler = getParentHandler();

        ChannelPipeline bossPipeline = pipeline();
        bossPipeline.addLast("binder", binder);
        if (parentHandler != null) {
            bossPipeline.addLast("userHandler", parentHandler);
        }

        Channel channel = getFactory().newChannel(bossPipeline);
        ......
    }

getFactory()获取的自然是我们前面new ServerBootStrap时的参数NioServerSocketChannelFactory对象,newChannel()的操作是new一个NioServerSocketChannel的对象并返回,传的参数是前面的bossPipeline。所以可以理解这个是针对boss线程的pipeline操作,对应的handler只有binder

    NioServerSocketChannel(
            ChannelFactory factory,
            ChannelPipeline pipeline,
            ChannelSink sink) {

        super(factory, pipeline, sink);

        try {
            socket = ServerSocketChannel.open();
        } catch (IOException e) {
            
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

netty源码分析(一)-启动 的相关文章

随机推荐

  • Java 高级篇:JVM 垃圾回收机制

    Java 语言的一大优势在于其具有自动垃圾回收 Garbage Collection GC 机制 让开发者无需关心内存的分配与释放 本文将详细解析 JVM Java Virtual Machine 中的垃圾回收机制 带你深入了解 GC 如何
  • 深度学习和语音系列教程 5-100:求共振峰

    文章目录 1 基音频率 1 1 基音频率的查看 2 共振峰的获取 2 1 倒谱法求共振峰 2 2 测试结果 2 3 共振峰位置坐标 2 4 多种情况下的共振峰测试 1 基音频率 1 1 基音频率的查看 基音频率就是发浊音时 气流通过声门使声
  • 在此计算机上运行应用程序不可选,win10提示此应用无法在你的电脑上运行若要找到适用怎么解决...

    最近有朋友问小编win10提示此应用无法在你的电脑上运行若要找到适用于你的电脑的版本 请咨询软件发布者应该怎么办 对于这样的问题 相信很多朋友都遇到过了 有时候我们经常会遇到这种情况 例如在win10系统中打开excel就可能会遇到这个错误
  • windows10清理鼠标右键菜单

    windows10清理鼠标右键菜单 文章目录 windows10清理鼠标右键菜单 前言 一 右键菜单管理 二 使用步骤 1 打开软件 2 选择不显示的菜单 效果 前言 系统右键菜单过长 挺烦人的 一般网上给出的答案都是修改注册表 对于小白来
  • 互联网世界的 “人工智能”——探秘 “深度学习” 的前世今生

    编者按 本文来自 流浪汉 投稿 ZhangLumin 一个在硅谷工作的码农 有机器学习背景 平常对产品方面很有兴趣 最近一段时间里 Facebook Google Yahoo 百度等各大公司都在尝试将深度学习 deep learning 算
  • 位图--排序

    位图使用基本情况 一个字节有8位 假设第0位表示0 第1位表示1 那么一个字节就可以表示8个数字 整数序列 0 1 4 7 在位序列中表示为10010011 左边第一位为低位 表示有效数字0 位序列如何表示 Java 整形int 用4个字节
  • java中重写父类方法加不加@Override

    java中重写父类方法加不加 Override 这个是我在刚学习java时遇到的问题 希望能给像我一样的新手学习时带来帮助 如有错误请指正 谢谢 class Father public String name public int age
  • python print带颜色乱码无效

    乱码了 那么导入库 并且进行init 即可 import colorama colorama init autoreset True print 033 1 31 40m 测试 print 033 1 32 41m 测试 print 033
  • “模块计算机类型“x64”与目标计算机类型“X86”冲突解决方案

    最近在编译一款开源软件的时候 遇到了 模块计算机类型 x64 与目标计算机类型 X86 冲突的问题 网上查了好多资料 都是配置 链接器 高级 目标计算机 和选择X64平台编译器 可是怎么试都不行 最后发现是 命令行 里依然是 X86 的问题
  • Java多线程面试题及答案

    这篇文章主要是对多线程的问题进行总结的 因此罗列了40个多线程的问题 这些多线程的问题 有些来源于各大网站 有些来源于自己的思考 可能有些问题网上有 可能有些问题对应的答案也有 也可能有些各位网友也都看过 但是本文写作的重心就是所有的问题都
  • 向量正交 与 函数正交

    目录 1 向量内积和外积 1 1 向量内积 点乘 1 2 向量外积 差乘 2 向量的正交 3 函数的正交 4 函数正交的意义 1 向量内积和外积 1 1 向量内积 点乘 假设 a a1 a2 an b b1 b2 bn 则a与b的内积为 a
  • Android开发之多Fragment切换优化(解决切换卡顿)

    我想刚刚接触安卓的同学或许会这么写 FragmentManager fragmentManager getSupportFragmentManager FragmentTransaction fragmentTransaction frag
  • Vue input输入框回车以后自动刷新页面

    今天测试提了一个bug 输入框输入barCode时 按下回车键应该是录入数量 但是却直接刷新页面了 一起来探究一下为什么 原因 W3C 标准中有如下规定 当一个form元素中只有一个输入框时 在该输入框中按下回车应提交该表单 解决方案 可以
  • 老男孩blog博文内容列表整理(博文索引)

    我花了点时间整理了下博文列表 如果有对大家有用的 我花了点时间整理了下博文列表 如果有对大家有用的 请直接拿下 请不要只当知识收藏家 如果喜欢收藏 我建议收藏古董 100 原创 生产环境多年经验总结 无任何测试不靠谱的博文 44 生产场景不
  • 职场恶霸00后,看完这篇你就知道了

    在程序员职场上 什么样的人最让人反感呢 是技术不好的人吗 并不是 技术不好的同事 我们可以帮他 是技术太强的人吗 也不是 技术很强的同事 可遇不可求 向他学习还来不及呢 真正让人反感的 是技术平平 却急于表现自己的人 每天加班到12点 在老
  • 组合

    定义类 就是新建了一种类型 type 有了类 我们接着构造相应类型的对象 更进一步 每个类型还应该有一个清晰的接口 interface 供用户使用 我们可以在一个新类的定义中使用其他对象 这就是组合 composition 组合是在Java
  • centos怎么卸载mysql

    centos怎么删除mysql centos删除mysql的方法 1 使用 rpm qa grep i mysql 命令查看mysql安装的服务 2 使用 rpm ev nodeps 服务名 命令将查询到的mysql服务全部删除即可 本教程
  • mysql导入报错 [Err] 1067 - Invalid default value for ‘create_time‘

    mysql导入报错 比较老的系统生成的数据库导入5 7时报错 Err 1067 Invalid default value for create time 先查询 select global sql mode 结果 ONLY FULL GR
  • 完美国际服务器维护中,《完美国际2》3月31日全服更新维护公告

    完美国际2 于3月31日早上8点起 全服停机进行更新维护 预计维护时间将持续4小时 请大家注意调整自己的游戏时间 由此给您带来的不便 敬请谅解 更新说明 一 暖春活动 花朝节 开启 一陂春水绕花身 花影妖娆各占春 冬去春来 春暖花开 祖龙城
  • netty源码分析(一)-启动

    对于netty的理解 首先要熟悉NIO相关的概念 可以参考学习这里 Java NIO 以NioServerSocket实现为例 netty的启动过程分析 netty的启动入口 我们一般会这样配置 ChannelFactory serverC