首页 > 代码库 > Netty的几个要点
Netty的几个要点
- Netty是一个传输层的框架,主要的功能就是两个:封装了NIO的操作,封装了CodeC接口,从而使得NIO的开发者只需要关注与业务功能本身的ChannelHandler。
- 不只是Netty,传输层主要解决的问题就是这两个,处理IO,处理CodeC
- CodeC主要处理的问题就是字节流的分帧(Frame),一般有以下几种
- 按结束符,比如http
- 定长
- 使用消息头消息体的方式,在消息头指定长度,比如TCP, Thrift
- Netty的前端实现了多线程的Reactor模式,可以指定Accept处理的线程池和IO读写的线程池,由Netty框架来管理事件的分发和线程池。
- Netty采用职责链ChannelPipeline来管理ChannelHandler. 这个职责链中的每个节点可以选择关注的事件去触发,节点的顺序很重要。Netty抽象了inbound和outbound事件的概念,由底层IO向用户层发出的事件称为inbound 事件,从pipeline 的HeadHandler向TailHandler传递事件。由用户层向底层IO发出的事件,比如write,是outbond事件,从TailHandler向HeadHandler传递,调用Unsafe 来完成网络操作。所以使用Netty时理解inbound 和 outbound 事件很重要。最新的netty-5.0取消了inbound / outbound Handler 接口,采用Facade模式设计ChannelHandler,包含了所有的inbound 和 outbound事件。采用Adapter 模式用ChannelHandlerAdapter空实现了ChannelHandler,具体的ChannelHandler只需要继承ChannelHandlerAdapter即可。
- XXXXEncoder是由用户向底层IO写时使用的,把业务数据编码成字节流,所以XXXEncoder覆盖了ChannelHandlerAdapter的Write 方法,响应outbound事件
- XXXXDecoder是由底层IO向用户层发出IO事件时使用的,把字节流编码成业务数据,或把字节流转化成ByteBuf,再由ByteBuf 转化成业务数据,响应inbound 事件
Netty的几个要点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。