pipeline字面意思就是管道(水管),管道里面的水就是你的数据(NIO里面就是ByteBuf),我们需要阀(tomcat中对应Valve,netty中对应ChannelHandler)对数据进行一些处理,例如认证,授权,安全检验等。InBound就去Decode,OutBound就去Encode。最终把结果写进SocketChannel。
避免一大堆if else 语句. Pipeline的作用就是组织不同处理器,在netty里就相当于它的大动脉,一个请求在生命周期内都是在Pipeline上的不同位置扭转的,这样既保证了逻辑的清晰,又使代码变得优雅。
* {@link ChannelHandlerContext}
* |
* +---------------------------------------------------+---------------+
* | ChannelPipeline | |
* | \|/ |
* | +----------------------------------------------+----------+ |
* | | ChannelHandler N | |
* | +----------+-----------------------------------+----------+ |
* | /|\ | |
* | | \|/ |
* | +----------+-----------------------------------+----------+ |
* | | ChannelHandler N-1 | |
* | +----------+-----------------------------------+----------+ |
* | /|\ . |
* | . . |
* | ChannelHandlerContext.fireIN_EVT() ChannelHandlerContext.OUT_EVT()|
* | [method call] [method call] |
* | . . |
* | . \|/ |
* | +----------+-----------------------------------+----------+ |
* | | ChannelHandler 2 | |
* | +----------+-----------------------------------+----------+ |
* | /|\ | |
* | | \|/ |
* | +----------+-----------------------------------+----------+ |
* | | ChannelHandler 1 | |
* | +----------+-----------------------------------+----------+ |
* | /|\ | |
* +---------------+-----------------------------------+---------------+
* | \|/
* +---------------+-----------------------------------+---------------+
* | | | |
* | [ Socket.read() ] [ Socket.write() ] |
* | |
* | Netty Internal I/O Threads (Transport Implementation) |
* +-----------------------------------------------------------------
评论区