Netty3 源码分析
文章平均质量分 70
Netty是一个事件驱动的异步网络框架,利用它可以很容易写出具有可扩展性的客户服务端程序,层次分明,只需要专注于业务逻辑的处理。通过阅读Jboss Netty3的源码,可以深入理解这个架构的设计精髓,领会其中的思想。
vonzhou
这个作者很懒,什么都没留下…
展开
-
Netty3 源码分析 - ChannelFuture
Netty3 源码分析 - ChannelFutureChannelFuture抽象的是Channel中异步IO操作的结果。在Netty中,所有的IO操作是异步的,意味着任何IO调用会立刻返回,而不是等到操作真正的执行完成。相反,会返回一个ChannelFuture 对象,在IO完成之后通过其得到结果状态。ChannelFuture 要么完成要么未完成,当IO操作开始执行会创建一个新的原创 2014-09-13 20:30:49 · 2364 阅读 · 0 评论 -
Netty3 源码分析 - 套接字绑定实现原理
前面关注的地方都是Netty采用的流水线处理方式的组织方式,ChannelHandler如何管理,通道状态,通道事件等这些上层的架构设计,那么Netty中如何实现诸如套接字绑定,连接,关闭等这些底层的操作呢?不能只顾着套用API写程序,却对细节不求甚解。这里大致追踪下OIO模式下Channel中套接字绑定的实现,(NIO以后分析)其实逻辑都是一样的,只是在线程模型的地方时不同的。大致过程如下(原创 2014-09-12 16:38:15 · 1790 阅读 · 0 评论 -
Netty3 源码分析 - ClientBootstrap
Bootstrap是通道初始化辅助类 提供了初始化通道或子通道所需要的数据结构,那么ClientBootstrap就是客户端的,而且会执行连接操作。配置通道,就是把相应的键值对选项传递给底层: ClientBootstrap b = ...; // Options for a new channel b.setOption("remoteAddress", new Inet原创 2014-09-11 18:59:14 · 4281 阅读 · 0 评论 -
Netty3 源码分析 - ChannelPipeline
ChannelPipeline的作用就是组织一系列的ChannelHandlers 为某一个Channel服务,处理各种事件。实现了拦截过滤器模式的高级形式(an advanced form of the Intercepting Filter pattern),进而有效控制如何处理一个事件以及ChannelHandlers之间如何交互。类型结构图为:流水线的创建:对于原创 2014-09-12 11:00:19 · 2066 阅读 · 0 评论 -
Netty3 源码分析 - OioClientSocketChannelFactory
是一个ClientSocketChannelFactory 的实现,基于SocketChannel的阻塞方式的客户端通道。使用的是传统的阻塞IO API,特点是能得到好的吞吐量和低延迟,当需要服务的连接数少的时候。(联系NIO和OIO的区别) 在OioClientSocketChannelFactory中只有一种线程类型,worker threads。每个连接的通道有一个专用的原创 2014-09-11 14:15:37 · 1899 阅读 · 0 评论 -
Netty3 源码分析 - ChannelStateEvent
Netty3 源码分析 - ChannelStateEventChannelStateEvent是ChannelEvent的子接口,可以代表改变的通知或者是请求,取决于它是上行还是下行事件。UpstreamChannelStateEvent是默认的上行通道状态事件实现类。结合ChannelState中的表很容易看懂源码。DownstreamChannelStateEve原创 2014-09-10 16:56:31 · 1643 阅读 · 0 评论 -
Netty3 源码分析 - ChannelState
Netty3 源码分析 - ChannelState枚举类ChannelState代表的是这个Channel的状态集,状态的解读和ChannelStateEvent中的value值以及事件的方向息息相关,下面这个表可以从宏观上把握。DirectionStateValueMeaningUpst原创 2014-09-10 16:06:40 · 1254 阅读 · 0 评论 -
Netty3 源码分析 - ChannelEvent
Netty3 源码分析 - ChannelEvent ChannelEvent是和这个Channel相关的IO事件和请求,会由各个ChannelHandler来处理。 事件分为上行和下行两种。当服务器从客户端收到一个消息,那么与之相关的就是一个上行事件(upstream event),流水线中的UpstreamChannelHandler会处理它;如果服务要回应这个原创 2014-09-10 15:47:24 · 2177 阅读 · 0 评论 -
Netty3 源码分析 - ChannelHandler
Netty3 源码分析 - ChannelHandler每个通道关联一个Pipeline,在流水线中拦截处理各种事件的对象就是ChannelHandler,它处理ChannelEvent而后进行传递。接口ChannelHandler没有提供任何方法,有两个子接口分别用来规范处理上行和下行的通道事件。ChannelHandler是随ChannelHandl原创 2014-09-10 10:17:06 · 3101 阅读 · 0 评论 -
Netty3 源码分析 - AbstractChannel
Netty3 源码分析 - AbstractChannelAbstractChannel 是Channel的部分实现,维护了一个通道相关的资源,如channel id, pipeline等;而且实现了对该套接字的IO操作,以及设置interestOps;这里还没有牵扯到底层的细节,只是这个框架的结构。(Channels中的具体实现有待分析)源码能说明一切:/原创 2014-09-09 18:27:57 · 1535 阅读 · 0 评论 -
Netty3 源码分析 - Channel
Netty3 源码分析 - Channel何为通道(Channel)?代表的是一个网络套接字的连接点(nexus)。一个通道抽象的内容包括:1)当前通道状态,是否打开,是否绑定等;2)通道的配置参数信息,如套接字缓冲区大小;3)通道支持的IO操作;4)处理和这个Channel相关的IO事件和请求的ChannelPipeline。在Netty中所有的IO操原创 2014-09-09 15:58:16 · 2362 阅读 · 0 评论 -
ChannelHandler原理
1.创建ChannelPipeline的方法是实现接口 ChannelPipelineFactory 中的那个 getPipeline() 方法,然后根据自己的业务需要加入相应的 ChannelHandler。 2. 接口 ChannelHandlerContext 提供的功能是统一管理这些ChannelHandler,使其能够和这个ChannelPipelin原创 2014-06-24 10:28:25 · 2954 阅读 · 0 评论