【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 )(二)

3 . 双向链表第 3 33 个元素 Handler 类型 : 其 Handler 是 HttpServerHandler 类型的对象, 也就是为 ChannelPipeline 添加的 HTTPServerHandler 业务逻辑处理器 ;



① 第 3 33 个元素 Handler 类型 : HttpServerHandler ;


② HTTPServerHandler 类结构 : 其中 HTTPServerHandler 继承 SimpleChannelInboundHandler<HttpObject> ;


public class HTTPServerHandler extends SimpleChannelInboundHandler\<HttpObject\>


③ 对应的向管道添加 HTTPServerHandler 处理器的代码 :


new ChannelInitializer<SocketChannel>() {// 创建通道初始化对象
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        // 该方法在服务器与客户端连接建立成功后会回调
        // 获取管道
        ChannelPipeline pipeline = ch.pipeline();
        // 为管道加入 HTTP 协议的编解码器 HttpServerCodec,
        // codec 中的 co 是 coder 编码器的意思, dec 是 decoder 解码器的意思
        // 第一个字符串是编解码器的名称
        pipeline.addLast("HttpServerCodec" , new HttpServerCodec());
       
        // 本次示例核心代码 ---------------------------------------------
        // 为管道 Pipeline 设置处理器 Hanedler
        pipeline.addLast("HTTPServerHandler", new HTTPServerHandler());
        // 本次示例核心代码 ---------------------------------------------
       
        // 管道初始化完成
        System.out.println("管道初始化完成!");
    }
}

【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 )(二)




4 . 双向链表第 4 44 个元素 : 第四个元素也是双向链表的结尾 , 类型是与链表头元素类型一致 , 是 DefaultChannelPipeline ;



① 第 4 44 个元素类型 : DefaultChannelPipeline ;


② next 为空 : 其 next 为空 , 说明该元素就是双向链表的结尾 ;



【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 )(二)





四、 数据入站与出站


1 . 双向链表对应的数据入站与出栈操作 :



① 链表中数据传递 : 在双向链表中 , 将数据按照两个方向进行传递 , 分别是入站和出站操作 ;


② 入站数据 : 从链表的表头 , 传递数据到链表尾部 , 将数据逐个 Handler 传递 , 每个链表元素中的 Handler 对数据都进行对应的处理 ;


③ 出站数据 : 从链表的尾部 , 向表头传递数据 , 经过每个 Handler 都对数据进行相应的处理 ;




以上面的代码示例为例进行解析




2 . 示例中的入站操作 :



① 初始化双向链表 : 客户端请求服务器端资源 , 客户端请求到来后 , 先初始化该 ChannelHandlerContext 双向链表 , 分别放入 ChannelInitializer , HttpServerCodec , HTTPServerHandler 三个 ChannelHandler 通道处理器 ;


② 数据解码 : 客户端请求数据 , 先传入 HttpServerCodec 服务器编解码器中进行处理 , 这里需要将数据解码 ;


③ 业务逻辑 : 然后将 HttpServerCodec 输出的数据 , 输入到用户自定义的 HTTPServerHandler 中进行处理 ;


上一篇:[算法] 国家地区数组按照中文首字母排序


下一篇:JAVA练习148-返回倒数第 k 个节点