文章目录

  • 一、 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 )相关推荐

  1. 深入分析netty(一)BootStrap与ServerBootStrap

    文章目录 1.揭开BootStrap神秘面纱 1.1.客户端BootStrap 1.1.1 NioSocketChannel 的初始化过程 1.1.2 ChannelFactory 和Channel类 ...

  2. Netty 的核心组件

    Netty 的核心组件有哪些? 1. Bootstrap 与 ServerBootstrap Bootstrap 与 ServerBootstrap 是 Netty 程序的引导类,主要用于配置各种参数 ...

  3. Netty的核心组件

    Netty是什么? Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.也就是说,Nett ...

  4. Netty学习1——Netty的核心组件

    Netty的核心组件 Netty的主要构件块:Channel.回调.Future.事件和ChannelHandler 1.Channel Channel是Java NIO的一个基本构造. 它代表一个到 ...

  5. Netty -Netty心跳检测机制案例,Netty通过WebSocket编程实现服务器和客户端长链接

    Netty心跳检测机制案例 案例要求 编写一个Netty心跳检测机制案例,当服务器超过3秒没有读时,就提示读空闲 当服务器超过5秒没有写操作时,提示写空闲 服务器超过7秒没有读或者写操作时,就提示读写 ...

  6. netty中的引导Bootstrap服务端

    引导一个应用程序是指对它进行配置,并使它运行起来的过程. 一.Bootstrap 类 引导类的层次结构包括一个抽象的父类和两个具体的引导子类,如图 8-1 所示 服务器致力于使用一个父 Channel ...

  7. Netty : netty 4如何解决空轮询bug

    1.美图 2.概述 空轮询bug参考:Netty : 臭名昭出的JDK的NIO bug(空轮询bug) 4.netty4 解决 4.1 构建阈值 int selectorAutoRebuildThre ...

  8. Netty : netty 3如何解决空轮询bug

    1.美图 2.概述 空轮询bug参考:Netty : 臭名昭出的JDK的NIO bug(空轮询bug) 3. netty 3 如何解决 netty3采用的是第三种方案,检测重点是select函数是否返 ...

  9. Netty —— Netty 模型

    前文 NIO介绍 NIO -- 三大组件 Netty -- 概述 Netty -- 下载.安装 Reactor 模式(单 Reactor 单线程.单 Reactor 多线程.主从 Reactor 多线 ...

最新文章

  1. 使用KNN模型进行多输出分类实战(Multioutput Classification)
  2. 统计学习方法---拉格朗日对偶新性
  3. hp-ux 11.23挂载ISO文件
  4. python--paramiko模块
  5. JAVA可阻塞队列-ArrayBlockingQueue
  6. linux内核killler,Linux内核参数overcommit_memory和OOM killer介绍
  7. 我的八年程序之路(二)三月方便面换来800月薪
  8. MATLAB 不使用科学计数法 显示坐标 及理解
  9. RPM方式安装MySQL5.5.48 (Aliyun CentOS 7.0 卸载MySQL5.7)
  10. win7虚拟机iOS坑爹法语键盘冲突解决方法
  11. 该网页无法正常运作xxxx将您重定向的次数过多
  12. Windows Docker Desktop 无法启动报错 Docker Desktop is shutting down 的可能解决办法
  13. 格灵深瞳,天才AI公司跌入谷底之后 | 小败局
  14. python3.6 opencv3.4.3使用surf特征出错【解决方案】
  15. wp教程-wp详细教程-免费wordpress模板主题搭建教程
  16. 上海纽约大学2020年本科招生简章正式公布,最优一本线!
  17. MarkDown数学符号之--微分
  18. 微众java面试_微众面试经验
  19. JDK7安装和配置 JAVA JDK7安装配置教程
  20. Allegro如何输出第三方网表操作指导

热门文章

  1. 浏览器本地存储的使用
  2. Eclipse反编译插件安装
  3. java爬取百度首页源代码
  4. 【给自己的小练习2-线段树】
  5. Perl中的单行凝视和多行凝视
  6. celery的log如何传递给django,由django管理
  7. beta阶段140字评论
  8. Redis_基本类型介绍和指令___2
  9. nagios二次开发(一)---开发思想
  10. java学习笔记(三)----成员权限,构造函数,this用法