【Netty】Netty 核心组件 ( ServerBootstrap | Bootstrap )

简介: 【Netty】Netty 核心组件 ( ServerBootstrap | Bootstrap )

文章目录

一、 ServerBootstrap / Bootstrap 引导组件

二、 服务器端 ServerBootstrap 引导组件

三、 客户端 Bootstrap 引导组件





一、 ServerBootstrap / Bootstrap 引导组件


ServerBootstrap / Bootstrap 引导组件 :



① 服务器 / 客户端 配置 : ServerBootstrap / Bootstrap 组件的作用是配置 Netty 服务器 / 客户端的各种配置 ;


② 关联各种组件 : 该 ServerBootstrap / Bootstrap 组件将线程池 ( NioEventLoopGroup ) , 套接字通道 ( NioServerSocketChannel / SocketChannel ) , 处理者 ( Handler ) , 通道初始化器 ( ChannelInitializer ) 关联在一起 ;


③ ServerBootstrap : 服务器端程序的引导组件 ;


④ Bootstrap : 客户端程序的引导组件 ;






二、 服务器端 ServerBootstrap 引导组件


ServerBootstrap 常用方法 : 该组件类是服务器端使用的引导组件 ;



1 . 关联线程池 : 关联服务器端的 BossGroup 和 WorkerGroup 线程池 ( NioEventLoopGroup 类型 ) , parentGroup 参数是 BossGroup 负责建立客户端连接 , childGroup 参数是 WorkerGroup 负责与客户端进行数据交互 ;


public ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)



2 . 设置通道类 : 设置服务器端的通道类型 , 一般设置 NioServerSocketChannel.class 值 ;


public B channel(Class<? extends C> channelClass)



3 . 添加 BossGroup 线程池配置 : 设置服务器端的配置 , ChannelOption option 参数是设置的操作类型 , T value 参数设置参数值 ; 如 bootstrap.option(ChannelOption.SO_BACKLOG, 128) 就是设置线程队列维护的连接个数 ;


public <T> B option(ChannelOption<T> option, T value)



4 . 添加 WorkerGroup 线程池配置 : 设置服务器端的配置 , ChannelOption option 参数是设置的操作类型 , T value 参数设置参数值 ; 如 bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true) 就是设置客户端连接的状态行为为保持连接状态 ;


public <T> ServerBootstrap childOption(ChannelOption<T> childOption, T value)



5 . 添加 BossGroup 线程池处理器 Handler : 给 BossGroup 线程池 ( NioEventLoopGroup 类型 ) 设置的处理器 , 该处理器需要用户自定义 , 继承 ChannelInboundHandlerAdapter 类 ;


public B handler(ChannelHandler handler)



6 . 添加 WorkerGroup 线程池处理器 ChildHandler : 给 WorkerGroup 线程池 ( NioEventLoopGroup 类型 ) 设置处理器 , 该处理器需要用户自定义 , 继承 ChannelInboundHandlerAdapter 类 ;


         

public ServerBootstrap childHandler(ChannelHandler childHandler)



7 . 绑定端口 : 服务器端的 ServerBootstrap 对象 , 调用 bind 方法 , 绑定本地的端口号 , 然后监听该端口的客户端连接请求 ;


public ChannelFuture bind(int inetPort)


8 . 服务器端常用的 ServerBootstrap 设置代码 :


// 1. BossGroup 线程池 : 负责客户端的连接
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
// 2. WorkerGroup 线程池 : 负责客户端连接的数据读写
EventLoopGroup workerGroup = new NioEventLoopGroup();
// 3. 服务器启动对象, 需要为该对象配置各种参数
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup) // 设置 主从 线程组 , 分别对应 主 Reactor 和 从 Reactor
        .channel(NioServerSocketChannel.class)  // 设置 NIO 网络套接字通道类型
        .option(ChannelOption.SO_BACKLOG, 128)  // 设置线程队列维护的连接个数
        .childOption(ChannelOption.SO_KEEPALIVE, true)  // 设置连接状态行为, 保持连接状态
        .childHandler(  // 为 WorkerGroup 线程池对应的 NioEventLoop 设置对应的事件 处理器 Handler
                new ChannelInitializer<SocketChannel>() {// 创建通道初始化对象
                    @Override
                    protected void initChannel(SocketChannel ch) throws Exception {
                        // 该方法在服务器与客户端连接建立成功后会回调
                        // 为 管道 Pipeline 设置处理器 Hanedler
                        ch.pipeline().addLast(new ServerHandler());
                    }
                }
        );
 // 4. 绑定本地端口 
 ChannelFuture channelFuture = null;
 try {
     // 绑定本地端口, 进行同步操作 , 并返回 ChannelFuture
     channelFuture = bootstrap.bind(8888).sync();
 } catch (InterruptedException e) {
     e.printStackTrace();
 } finally {
     // 出现异常后, 优雅的关闭
     bossGroup.shutdownGracefully();
     workerGroup.shutdownGracefully();
}





三、 客户端 Bootstrap 引导组件


Bootstrap 常用方法 :



1 . 关联线程池 : 关联客户端的 NioEventLoopGroup 线程池 , 客户端只有一个线程池 , 只需要与服务器进行数据读写交互 , EventLoopGroup group 参数就是 NioEventLoopGroup 线程池 , 负责与客户端进行数据交互 ;


public B group(EventLoopGroup group)

1


2 . 设置通道类 : 设置客户端的通道类型 , 一般设置 NioSocketChannel.class 值 ;


public B channel(Class<? extends C> channelClass)

1


3 . 设置 NioEventLoopGroup 线程池处理器 Handler : 为客户端的 NioEventLoopGroup 线程池 设置处理器 , 该处理器需要用户自定义 , 继承 ChannelInboundHandlerAdapter 类 ;


public B handler(ChannelHandler handler)

1


4 . 连接服务器 : 连接 String inetHost 地址的 int inetPort 端口 , 建立连接用于读写数据 ;


public ChannelFuture connect(String inetHost, int inetPort)



5 . 客户端 Bootstrap 代码示例 :


// 客户端只需要一个 时间循环组 , 即 NioEventLoopGroup 线程池
EventLoopGroup eventLoopGroup = new NioEventLoopGroup();
// 客户端启动对象
Bootstrap bootstrap = new Bootstrap();
// 设置相关参数
bootstrap.group(eventLoopGroup)     // 设置客户端的线程池
        .channel(NioSocketChannel.class)    // 设置客户端网络套接字通道类型
        .handler(   // 设置客户端的线程池对应的 NioEventLoop 设置对应的事件处理器 Handler
                new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel ch) throws Exception {
                        ch.pipeline().addLast(new ClientHandler());
                    }
                }
        );
try {
    // 开始连接服务器, 并进行同步操作
    // ChannelFuture 类分析 , Netty 异步模型
    // sync 作用是该方法不会再次阻塞
    ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", 8888).sync();
    System.out.println("客户端连接服务器成功 ...");
    // 关闭通道, 开始监听
    channelFuture.channel().closeFuture().sync();
} catch (InterruptedException e) {
    e.printStackTrace();
}finally {
    // 优雅的关闭
    eventLoopGroup.shutdownGracefully();
}


目录
相关文章
|
3月前
|
前端开发 网络协议 Java
Netty | 工作流程图分析 & 核心组件说明 & 代码案例实践
Netty | 工作流程图分析 & 核心组件说明 & 代码案例实践
110 0
|
3月前
|
网络协议 前端开发 Java
Netty Review - 核心组件扫盲
Netty Review - 核心组件扫盲
71 0
|
6月前
|
前端开发 网络协议 API
学习Netty BootStrap的核心知识,成为网络编程高手!
学习Netty BootStrap的核心知识,成为网络编程高手!
45 0
|
7月前
|
监控 前端开发 网络协议
Netty核心组件详解
Netty核心组件详解
33 0
|
7月前
|
编解码 前端开发 Java
源码分析Netty:核心组件及启动过程分析
本篇从实例出发,了解Netty核心组件的概念、作用及串联过程。从概念到设计原理,再到深入了解实现细节,从而能够清晰地掌握Netty的技术细节甚至存在的问题,才能最终更好地支持我们实际的各项业务。
314 0
|
8月前
|
前端开发 Java 调度
Netty中有哪些核心组件?
最近又有粉丝问我这样一个问题,说Netty中最核心的组件有哪些?它们都起什么作用?今天,给大家详细聊一聊
53 0
|
存储 缓存 编解码
Netty源码剖析之核心组件
NioEventLoop有以下核心功能。 - 开启Selector并初始化。 - 把ServerSocketChannel注册到Selector上。 - 处理各种I/O事件,如OP_ACCEPT、OP_CONNECT、OP_READ、 OP_WRITE事件。 - 执行定时调度任务。 - 解决JDK空轮询bug。
|
前端开发
netty系列之:Bootstrap,ServerBootstrap和netty中的实现
netty系列之:Bootstrap,ServerBootstrap和netty中的实现
netty系列之:Bootstrap,ServerBootstrap和netty中的实现
|
存储 前端开发 Java
【Netty】Netty核心组件介绍
前篇博文体验了Netty的第一个示例,下面接着学习Netty的组件和其设计。
252 0
【Netty】Netty核心组件介绍
|
机器学习/深度学习 Java 调度
【Netty】Netty 核心组件 ( ChannelOption | EventLoopGroup )
【Netty】Netty 核心组件 ( ChannelOption | EventLoopGroup )
169 0