【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 设置对应的事件 处理器 Handlernew ChannelInitializer<SocketChannel>() {// 创建通道初始化对象@Overrideprotected void initChannel(SocketChannel ch) throws Exception {// 该方法在服务器与客户端连接建立成功后会回调// 为 管道 Pipeline 设置处理器 Hanedlerch.pipeline().addLast(new ServerHandler());}});// 4. 绑定本地端口 ChannelFuture channelFuture = null;try {// 绑定本地端口, 进行同步操作 , 并返回 ChannelFuturechannelFuture = 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)
2 . 设置通道类 : 设置客户端的通道类型 , 一般设置 NioSocketChannel.class 值 ;
public B channel(Class<? extends C> channelClass)
3 . 设置 NioEventLoopGroup 线程池处理器 Handler : 为客户端的 NioEventLoopGroup 线程池 设置处理器 , 该处理器需要用户自定义 , 继承 ChannelInboundHandlerAdapter 类 ;
public B handler(ChannelHandler handler)
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 设置对应的事件处理器 Handlernew ChannelInitializer<SocketChannel>() {@Overrideprotected 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();
}
【Netty】Netty 核心组件 ( ServerBootstrap | Bootstrap )相关推荐
- 深入分析netty(一)BootStrap与ServerBootStrap
文章目录 1.揭开BootStrap神秘面纱 1.1.客户端BootStrap 1.1.1 NioSocketChannel 的初始化过程 1.1.2 ChannelFactory 和Channel类 ...
- Netty 的核心组件
Netty 的核心组件有哪些? 1. Bootstrap 与 ServerBootstrap Bootstrap 与 ServerBootstrap 是 Netty 程序的引导类,主要用于配置各种参数 ...
- Netty的核心组件
Netty是什么? Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.也就是说,Nett ...
- Netty学习1——Netty的核心组件
Netty的核心组件 Netty的主要构件块:Channel.回调.Future.事件和ChannelHandler 1.Channel Channel是Java NIO的一个基本构造. 它代表一个到 ...
- Netty -Netty心跳检测机制案例,Netty通过WebSocket编程实现服务器和客户端长链接
Netty心跳检测机制案例 案例要求 编写一个Netty心跳检测机制案例,当服务器超过3秒没有读时,就提示读空闲 当服务器超过5秒没有写操作时,提示写空闲 服务器超过7秒没有读或者写操作时,就提示读写 ...
- netty中的引导Bootstrap服务端
引导一个应用程序是指对它进行配置,并使它运行起来的过程. 一.Bootstrap 类 引导类的层次结构包括一个抽象的父类和两个具体的引导子类,如图 8-1 所示 服务器致力于使用一个父 Channel ...
- Netty : netty 4如何解决空轮询bug
1.美图 2.概述 空轮询bug参考:Netty : 臭名昭出的JDK的NIO bug(空轮询bug) 4.netty4 解决 4.1 构建阈值 int selectorAutoRebuildThre ...
- Netty : netty 3如何解决空轮询bug
1.美图 2.概述 空轮询bug参考:Netty : 臭名昭出的JDK的NIO bug(空轮询bug) 3. netty 3 如何解决 netty3采用的是第三种方案,检测重点是select函数是否返 ...
- Netty —— Netty 模型
前文 NIO介绍 NIO -- 三大组件 Netty -- 概述 Netty -- 下载.安装 Reactor 模式(单 Reactor 单线程.单 Reactor 多线程.主从 Reactor 多线 ...
最新文章
- 使用KNN模型进行多输出分类实战(Multioutput Classification)
- 统计学习方法---拉格朗日对偶新性
- hp-ux 11.23挂载ISO文件
- python--paramiko模块
- JAVA可阻塞队列-ArrayBlockingQueue
- linux内核killler,Linux内核参数overcommit_memory和OOM killer介绍
- 我的八年程序之路(二)三月方便面换来800月薪
- MATLAB 不使用科学计数法 显示坐标 及理解
- RPM方式安装MySQL5.5.48 (Aliyun CentOS 7.0 卸载MySQL5.7)
- win7虚拟机iOS坑爹法语键盘冲突解决方法
- 该网页无法正常运作xxxx将您重定向的次数过多
- Windows Docker Desktop 无法启动报错 Docker Desktop is shutting down 的可能解决办法
- 格灵深瞳,天才AI公司跌入谷底之后 | 小败局
- python3.6 opencv3.4.3使用surf特征出错【解决方案】
- wp教程-wp详细教程-免费wordpress模板主题搭建教程
- 上海纽约大学2020年本科招生简章正式公布,最优一本线!
- MarkDown数学符号之--微分
- 微众java面试_微众面试经验
- JDK7安装和配置 JAVA JDK7安装配置教程
- Allegro如何输出第三方网表操作指导