本来打算socketchannel和pipeline分开说的,因为它们就是截然不同的东西,但是看NioSocketChannel的实现中,很多地方都是调用了pipeline.write()这样的方法来实现功能的,所以分开说好像又不是很nice,那就把他们放在一起,先从pipeline讲起。
pipeline顾名思义,管道,它为用户对于io内容的处理提供了链式的处理模式,比较清晰用起来也挺舒服,先来看一下它的实现。
最底层接口类ChannelOutBoundInvoker主要处理一些主动发起的动作,比如:bind connect read write flush。而ChannelInBoundInvoker 则处理一些接收到的事件,如channel的registed,active,inactive,read事件。channelpipeline在二者基础上,增加了对于handler的增删功能。
进入DefaultChannelPipeline,我们首先遇到两个重要成员
final AbstractChannelHandlerContext head; final AbstractChannelHandlerContext tail;
我们都知道channelPipeline中是存放着handler的,那么这个AbstractChannelHandlerContext和handler又