• 5-网络架构和Netty系列-Bootstrap和Channel源码分析


    Bootstrap组成

    参考源码AbstractBootstrap

    1. 客户端启动类Bootstrap

    Bootstrap 意思是引导,一个 Netty 应用通常由一个 Bootstrap 开始,主要作用是配置整个 Netty 程序,串联各个组件,Netty 中 Bootstrap 类是客户端程序的启动引导类,ServerBootstrap 是服务端启动引导类。

    • 声明Bootstrap
      • server端为ServerBootstrap
      • client端为Bootstrap

    2. 设置初始化内容

    • 创建reactor 线程组
        EventLoopGroup bossLoopGroup = new NioEventLoopGroup(1);
        EventLoopGroup workerLoopGroup = new NioEventLoopGroup();
    
    • 1
    • 2
    • 为父(接收者)和子(客户端)设置 EventLoopGroup。
        b.group(bossLoopGroup, workerLoopGroup);
    
    • 1
    • 指定Channel的类型
      • server端为NioServerSocketChannel
      • client端为NioSocketChannel
    • 设置处理数据的Handler

    3. 构建ChannelFuture

    • 声明ChannelFuture,实例化Channel
    ChannelFuture regFuture = initAndRegister();
    ChannelFuture initAndRegister() {
        Channel channel = channelFactory().newChannel();
    	  ChannelFuture regFuture = group().register(channel);
      	return regFuture;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • ChannelFuture注册监听器
    • doBind地址和事件
    • 返回Future

    Channel

    在Netty中,Channel相当于一个Socket的抽象,它为用户提供了关于Socket状态(是连接还是断开)及对Socket的读、写等操作。每当Netty建立了一个连接,都创建一个与其对应的Channel实例。

    Channel的作用

    Netty 网络通信的组件,能够用于执行网络 I/O 操作。Channel 为用户提供:

    • 当前网络连接的通道的状态(例如是否打开?是否已连接?)
    • 网络连接的配置参数 (例如接收缓冲区大小)
    • 提供异步的网络 I/O 操作(如建立连接,读写,绑定端口),异步调用意味着任何 I/O 调用都将立即返回,并且不保证在调用结束时所请求的 I/O 操作已完成。 调用立即返回一个 ChannelFuture 实例,通过注册监听器到 ChannelFuture 上,可以 I/O 操作成功、失败或取消时回调通知调用方。
    • 支持关联 I/O 操作与对应的处理程序。

    Channel 类型

    不同协议、不同的阻塞类型的连接都有不同的 Channel 类型与之对应。下面是一些常用的 Channel 类型:

    • NioSocketChannel,异步的客户端 TCP Socket 连接。
    • NioServerSocketChannel,异步的服务器端 TCP Socket 连接。
    • NioDatagramChannel,异步的 UDP 连接。
    • NioSctpChannel,异步的客户端 Sctp 连接。
    • NioSctpServerChannel,异步的 Sctp 服务器端连接,这些通道涵盖了 UDP 和 TCP 网络 IO 以及文件 IO。
  • 相关阅读:
    如此理解sed会简单
    computed计算方法不被调用的原因;只有在使用时才会被调用
    spring boot整合redis—邮箱验证码
    电脑中缺少dll文件怎么解决?电脑dll文件要怎么打开?
    ConcurrentHashMap源码解读(jdk1.8以上版本)
    NX二次开发-NXOPEN C# Part.GetPreviewImage读取prt文件预览图
    【数据结构】模拟实现栈和队列
    第9章 无监督学习
    STM32WB55开发(5)----调整射频功率
    图的应用之最小生成树
  • 原文地址:https://blog.csdn.net/xianghanscce/article/details/125631964