码迷,mamicode.com
首页 > Web开发 > 详细

Netty的几个要点

时间:2014-09-16 17:32:30      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:netty   java   多线程   reactor   codec   

  • Netty是一个传输层的框架,主要的功能就是两个:封装了NIO的操作,封装了CodeC接口,从而使得NIO的开发者只需要关注与业务功能本身的ChannelHandler。

  • 不只是Netty,传输层主要解决的问题就是这两个,处理IO,处理CodeC

  • CodeC主要处理的问题就是字节流的分帧(Frame),一般有以下几种
  1. 按结束符,比如http
  2. 定长
  3. 使用消息头消息体的方式,在消息头指定长度,比如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的几个要点

标签:netty   java   多线程   reactor   codec   

原文地址:http://blog.csdn.net/iter_zc/article/details/39317983

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!