天天看点

深入浅出Netty之一概念模型

Netty是一个java领域常用的IO框架,小编最近简单看了下它的实现,和大家分享下。小编能力有限,有不对的地方还请大家指出。这个系列将分多个文章来完成,第一篇先简单介绍下netty的概念模型。使用的netty版本是3.5.11.Final。

Netty的核心概念可以用这个类图来表示:

深入浅出Netty之一概念模型

一.Bootstrap

   netty框架启动的工具类,分client,server和udp3种,其核心功能是初始化主channel

二.ChannelFactory

   创建Channel的工厂,接受ChannelPipeline参数,创建一个Channel。针对不同场景,netty提供了各种ChannelFactory,比如ServerChannelFactory用来创建server端的Channel,比如DatagramChannelFactory用来创建UDP的Channel

三.ChannelPipelineFactory

  创建ChannelPipeline的工厂,比如在server中接受一个请求(子channel)时,会使用ChannelPipelineFactory创建一个ChannelPipeline,并附给子channel。该类一般是用户定义,是netty提供的扩展接口,基于此用户可以自定义其事件处理流。

四.Channel

  Channel代表着一个通道,其封装了各种IO操作,比如bind,connect等,Channel还管理着一些配置信息,用户可以自定义一些IO参数。同时Channel是可以继承的,在server场景下,accept的channel会作为主channel的子channel存在。netty默认提供了各种Channel实现,包括OIO/NIO,udp/tcp,client/server等。Netty的channel是对java nio的封装。

五.ChannelPipeline

  ChannelPipeline管理着一些列由用户自定义的ChannelHandler,handler之间使用职责链组成。同时,它还提供了事件触发的入口,这些事件将在handler之间按注册顺序执行。

六.ChannelHandler

  事件处理器,主要分2个子接口ChannelUpstreamHandler和ChannelDownstreamHandler,分别处理UpstreamEvent和DownstreamEvent。这是业务方直接可扩展的接口,业务逻辑基本都封装在这里。一个handler也可以同时处理2种类型的事件。

七.ChannelEvent

  事件,流转方式分Upstream events和downstream events,类型分MessageEvent,ExceptionEvent,ChannelStateEvent,WriteCompletionEvent等。

 Upstream event主要有:messageReceived,exceptionCaught,channelOpen,channelClosed,channelBound,channelUnbound,channelConnected,writeComplete,channelDisconnected,channelInterestChanged,childChannelOpen,childChannelClosed等。

Downstream event主要有:write,bind,unbind,connect,disconnect,close等。

八.ChannelSink

  Downstream事件的最终处理者,所有downstream事件交给netty线程前都会被其处理。它是管理IO线程和事件处理的桥梁。同样针对不同的场景,netty提供了各种实现。

以上是netty的核心模型,事件流转如下图

深入浅出Netty之一概念模型

 Upstream事件只会交给Upstream handler处理,downstream同理。