Bootstrap的handler和childHandler
我们知道不管是服务端还是客户端都进行了handler的设置,通过添加hanlder,我们可以监听Channel的各种动作以及状态的改变,包括连接,绑定,接收消息等。
- 在基类AbstractBootstrap有handler方法,目的是添加一个handler,监听Bootstrap的动作,客户端的Bootstrap中,继承了这一点。
- 在服务端的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相关推荐
- netty中的引导Bootstrap服务端
引导一个应用程序是指对它进行配置,并使它运行起来的过程. 一.Bootstrap 类 引导类的层次结构包括一个抽象的父类和两个具体的引导子类,如图 8-1 所示 服务器致力于使用一个父 Channel ...
- 12、Bootstrap和ServerBootstrap啥关系
一.Bootstrap.ServerBootstrap啥关系 Bootstrap客户端引导类,ServerBootstrap服务端引导类. 二.BootStrap介绍 1.客户端BootStrap B ...
- 深入分析netty(一)BootStrap与ServerBootStrap
文章目录 1.揭开BootStrap神秘面纱 1.1.客户端BootStrap 1.1.1 NioSocketChannel 的初始化过程 1.1.2 ChannelFactory 和Channel类 ...
- Handler用法总结
一.线程通讯问题 1.1 Message.Handler.Looper 在Android中提供了一种异步回调机制Handler,我们可以它来完成一个很长时间的任务. Handler基本使用: 在主线程 ...
- 利用Hudi Bootstrap转化现有Hive表的parquet/orc文件为Hudi表
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站:https://www.captainai.net/dongkelun 前言 在最开始学习Hudi源码 ...
- Netty入门系列(1) --使用Netty搭建服务端和客户端
引言 前面我们介绍了网络一些基本的概念,虽然说这些很难吧,但是至少要做到理解吧.有了之前的基础,我们来正式揭开Netty这神秘的面纱就会简单很多. 服务端 public class PrintServ ...
- 【Netty】Netty 核心组件 ( Future | Channel | Selector | ChannelHandler )
文章目录 一. Future / ChannelFuture 异步操作监听组件 二. Channel 通道组件 三. Selector 选择器组件 四. ChannelHandler 通道处理器组件 ...
- ServerBootstrap的启动流程
一.ServerBootstrap的启动示例代码 EventLoopGroup bossEventLoopGroup = new NioEventLoopGroup(new NamedThreadFa ...
- Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信
## Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载 ...
最新文章
- 055——VUE中vue-router之路由参数的随意设置与伪静态链接地址处理:
- Android Architecture Components Part2:LiveData
- dedecms插件开发教程
- php for循环in的用法,JavaScript中for in循环是如何使用的?需要注意些什么?
- LoadRunner监控局域网内其他服务器系统资源设置
- 源码varnish安装
- 最新出炉-阿里 2020届算法工程师-自然语言处理(实习生)以及补充:快递最短路径
- html+include设置,html中的include标签是什么?htmlinclude实现配置解析
- drop table 、delete table和truncate table的区别
- Python之面向对象的程序设计
- centos7 安装 nvm
- 服务器总线协议_第一章----I2C总线协议入门
- f分布表完整图a=0.01_R语言具有Student-t分布改进的GARCH(1,1)模型的贝叶斯估计...
- 国内最大的两个网盘(rayfile和纳米盘)神秘资源下载搜索技巧
- 苹果手机一直显示搜索服务器,苹果手机safari浏览器搜索页面没有了
- RabbitMQ详解以及spring对RabbitMQ的集成(附带部分源码解读)
- 软件工程与计算机科学的区别
- Scratch3.0——助力新进程序员理解程序(案例九、等差数列2)
- 02-JVM、JRE、JDK
- ESP8266学习之路 十二 (读写文件)
热门文章
- kafka记录及面试题
- Flutter 以Dialog Activity形式展现
- Python从入门到入土-Python3 File(文件) 方法
- POJ:3579-Median(二分+尺取寻找中位数)
- 网站自动登录功能的设计
- win8安装msi出现提示2503 2502的错误代码
- 各类最新Asp .Net Core 项目和示例源码
- yum(Fedora和RedHat以及SUSE中的Shell前端软件包管理器)命令详解
- (转载)C++之tinyXML使用
- ORACLE创建用户,建表空间,授予权限