我们知道不管是服务端还是客户端都进行了handler的设置,通过添加hanlder,我们可以监听Channel的各种动作以及状态的改变,包括连接,绑定,接收消息等。

  1. 在基类AbstractBootstrap有handler方法,目的是添加一个handler,监听Bootstrap的动作,客户端的Bootstrap中,继承了这一点。
  2. 在服务端的ServerBootstrap中增加了一个方法childHandler,它的目的是添加handler,用来监听已经连接的客户端的Channel的动作和状态。

handler在初始化时就会执行,而childHandler会在客户端成功connect后才执行,这是两者的区别。

我们的代码经常这样写

EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG,128).childOption(ChannelOption.SO_KEEPALIVE,true)
  • childHandler()和childOption()都是给workerGroup (也就是group方法中的childGroup参数)进行设置的option()和handler()都是给bossGroup(也就是group方法中的parentGroup参数)设置的。

  • 另一种方法说option()和handler()是在server启动时进行设置和调用,childHandler()和childOption()是在连接建立是设置和调用的。其实都是对的。

  • bossGroup是在服务器一启动就开始工作,负责监听客户端的连接请求。当建立连接后就交给了workGroup进行事务处理,两种是从不同的角度解释的。

在代码中我们看到这样的操作

//添加一个Hanlder用来处理各种Channel状态
pipeline.addLast("handlerIn", new ClientHandler());
//添加一个Handler用来接收监听IO操作的
pipeline.addLast("handlerOut", new OutHandler());

pipeline是伴随Channel的存在而存在的,交互信息通过它进行传递,我们可以addLast(或者addFirst)多个handler,第一个参数是名字,无具体要求,如果填写null,系统会自动命名。

文章转自

Bootstrap的handler和childHandler相关推荐

  1. netty中的引导Bootstrap服务端

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

  2. 12、Bootstrap和ServerBootstrap啥关系

    一.Bootstrap.ServerBootstrap啥关系 Bootstrap客户端引导类,ServerBootstrap服务端引导类. 二.BootStrap介绍 1.客户端BootStrap B ...

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

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

  4. Handler用法总结

    一.线程通讯问题 1.1 Message.Handler.Looper 在Android中提供了一种异步回调机制Handler,我们可以它来完成一个很长时间的任务. Handler基本使用: 在主线程 ...

  5. 利用Hudi Bootstrap转化现有Hive表的parquet/orc文件为Hudi表

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站:https://www.captainai.net/dongkelun 前言 在最开始学习Hudi源码 ...

  6. Netty入门系列(1) --使用Netty搭建服务端和客户端

    引言 前面我们介绍了网络一些基本的概念,虽然说这些很难吧,但是至少要做到理解吧.有了之前的基础,我们来正式揭开Netty这神秘的面纱就会简单很多. 服务端 public class PrintServ ...

  7. 【Netty】Netty 核心组件 ( Future | Channel | Selector | ChannelHandler )

    文章目录 一. Future / ChannelFuture 异步操作监听组件 二. Channel 通道组件 三. Selector 选择器组件 四. ChannelHandler 通道处理器组件 ...

  8. ServerBootstrap的启动流程

    一.ServerBootstrap的启动示例代码 EventLoopGroup bossEventLoopGroup = new NioEventLoopGroup(new NamedThreadFa ...

  9. Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信

    ## Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载 ...

最新文章

  1. 055——VUE中vue-router之路由参数的随意设置与伪静态链接地址处理:
  2. Android Architecture Components Part2:LiveData
  3. dedecms插件开发教程
  4. php for循环in的用法,JavaScript中for in循环是如何使用的?需要注意些什么?
  5. LoadRunner监控局域网内其他服务器系统资源设置
  6. 源码varnish安装
  7. 最新出炉-阿里 2020届算法工程师-自然语言处理(实习生)以及补充:快递最短路径
  8. html+include设置,html中的include标签是什么?htmlinclude实现配置解析
  9. drop table 、delete table和truncate table的区别
  10. Python之面向对象的程序设计
  11. centos7 安装 nvm
  12. 服务器总线协议_第一章----I2C总线协议入门
  13. f分布表完整图a=0.01_R语言具有Student-t分布改进的GARCH(1,1)模型的贝叶斯估计...
  14. 国内最大的两个网盘(rayfile和纳米盘)神秘资源下载搜索技巧
  15. 苹果手机一直显示搜索服务器,苹果手机safari浏览器搜索页面没有了
  16. RabbitMQ详解以及spring对RabbitMQ的集成(附带部分源码解读)
  17. 软件工程与计算机科学的区别
  18. Scratch3.0——助力新进程序员理解程序(案例九、等差数列2)
  19. 02-JVM、JRE、JDK
  20. ESP8266学习之路 十二 (读写文件)

热门文章

  1. kafka记录及面试题
  2. Flutter 以Dialog Activity形式展现
  3. Python从入门到入土-Python3 File(文件) 方法
  4. POJ:3579-Median(二分+尺取寻找中位数)
  5. 网站自动登录功能的设计
  6. win8安装msi出现提示2503 2502的错误代码
  7. 各类最新Asp .Net Core 项目和示例源码
  8. yum(Fedora和RedHat以及SUSE中的Shell前端软件包管理器)命令详解
  9. (转载)C++之tinyXML使用
  10. ORACLE创建用户,建表空间,授予权限