概述
从应用程序开发人员的角度来看,Netty的主要组件是ChannelHandler,它充当着所有入站和出站数据的应用程序逻辑的容器。这是可行的,因为ChannelHandler的方法是由网络事件触发的。事实上ChannelHandler可专门用于几乎任何类型的动作,例如将数据从一种格式转换为另外一种格式,或者处理转换过程中所抛出的异常。
ChannelHandler主要由两种组成,ChannelInboundHandler和ChannelOutboundHandler这两种
其中ChannelInboundHandler是进站处理器,当channel进站时,产生一的一系列事件将由ChannelHandler所对应的API处理,当然netty是基于事件异步处理的,是由EventLoop不停地select出事件然后调用ChannelHandler的API,同理ChannelOutboundHandler是出站处理器。
ChannelPipeline为ChannelHandler链提供了容器,并定义了用于在该链上传播入站和出站事件流的API。当Channel被创建时,他会自动的分配到它专属的ChannelPipeline。
ChannelHandller安装到ChannelPipeline中的过程如下所示:
- 一个ChannelInitializer的实现被注册到了ServerBootstrap中;
- 当ChannelInitializer.initChannel()方法被调用时,ChannelInitializer将在ChannelPipeline中安装一组自定义的ChannelHandler;
- ChannelInitializer将它自己从ChannelPipeline中移除
ChannelPipeline p = ...;
p.addLast("1", new InboundHandlerA());
p.addLast("2", new InboundHandlerB());
p.addLast("3", new OutboundHandlerA());
p.addLast("4", new OutboundHandlerB());
p.addLast("5", new InboundOutboundHandlerX());
从代码中我们知道ChannelHandler在ChannelPipeline中的编排顺序是从1,2,3,4,5。当入站时是从ChannelPipeline中从头部一次执行的,也就是一次执行1,2,5;
最后
以上就是迅速画笔为你收集整理的netty学习(三)ChannelInboundHandler和ChannelOutboundHandler的全部内容,希望文章能够帮你解决netty学习(三)ChannelInboundHandler和ChannelOutboundHandler所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复