深入浅出Netty之一概念模型
来源:互联网 发布:烈焰龙城轮回数据 编辑:程序博客网 时间:2024/06/05 05:18
Netty是一个java领域常用的IO框架,小编最近简单看了下它的实现,和大家分享下。小编能力有限,有不对的地方还请大家指出。这个系列将分多个文章来完成,第一篇先简单介绍下netty的概念模型。使用的netty版本是3.5.11.Final。
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之一概念模型
- 深入浅出Netty
- 《深入浅出Netty》【PDF】下载
- 深入浅出Netty源码剖析
- 机器学习之一 模型评估及部分概念
- 【Netty】Netty系列之Netty线程模型
- Netty学习之一
- Netty系列之一介绍
- Netty入门之一:用户指南
- 03 Netty核心概念
- Netty核心概念
- Netty/NIO 概念
- netty基础概念
- Netty(一)核心概念
- Netty概念入门
- netty之基础概念
- Netty线程模型
- Netty线程模型详解
- java 数组
- 程序的真正入口
- 详解Java解析XML的四种方法
- UVA 1346 - Songs
- Socket编程指南及示例程序
- 深入浅出Netty之一概念模型
- JAVA NIO 大文件读取
- java学习——画图板
- 蛇年回顾我的2012,展望2013—菜鸟程序员的成长
- com.sun.awt.AWTUtilities.setWindowOpacity相关说明
- Spring --- Validation
- IPA转APP的方法和APP转IPA的方法
- Linux服务器(redhat)的安全加固
- Axis WebService 一看就懂