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

简介: 【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("管道初始化完成!");
    }
}

image.png




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



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


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



image.png





四、 数据入站与出站


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



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


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


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




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




2 . 示例中的入站操作 :



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


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


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


目录
相关文章
|
4月前
|
Java
【Netty 网络通信】Netty 工作流程分析
【1月更文挑战第9天】Netty 工作流程分析
|
3月前
|
Java Unix Linux
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
当涉及到网络通信和高性能的Java应用程序时,Netty是一个强大的框架。它提供了许多功能和组件,其中之一是JNI传输。JNI传输是Netty的一个特性,它为特定平台提供了高效的网络传输。 在本文中,我们将深入探讨Netty提供的特定平台的JNI传输功能,分析其优势和适用场景。我们将介绍每个特定平台的JNI传输,并讨论其性能、可靠性和可扩展性。通过了解这些特定平台的JNI传输,您将能够更好地选择和配置适合您应用程序需求的网络传输方式,以实现最佳的性能和可靠性。
57 7
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
|
6月前
netty的异常分析 IllegalReferenceCountException refCnt: 0, decrement: 1
netty的异常分析 IllegalReferenceCountException refCnt: 0, decrement: 1
67 0
|
4月前
|
前端开发 网络协议 Java
Netty | 工作流程图分析 & 核心组件说明 & 代码案例实践
Netty | 工作流程图分析 & 核心组件说明 & 代码案例实践
114 0
|
4月前
|
网络协议 前端开发 Java
Netty Review - 核心组件扫盲
Netty Review - 核心组件扫盲
73 0
|
6月前
|
前端开发
Netty4 读写水位控制分析
Netty4 读写水位控制分析
36 0
|
6月前
|
运维 Java
高并发下Netty4底层bug导致直接内存溢出分析
高并发下Netty4底层bug导致直接内存溢出分析
97 0
|
8月前
|
监控 前端开发 网络协议
Netty核心组件详解
Netty核心组件详解
36 0
|
8月前
|
编解码 前端开发 Java
源码分析Netty:核心组件及启动过程分析
本篇从实例出发,了解Netty核心组件的概念、作用及串联过程。从概念到设计原理,再到深入了解实现细节,从而能够清晰地掌握Netty的技术细节甚至存在的问题,才能最终更好地支持我们实际的各项业务。
314 0
|
9月前
|
前端开发 Java 调度
Netty中有哪些核心组件?
最近又有粉丝问我这样一个问题,说Netty中最核心的组件有哪些?它们都起什么作用?今天,给大家详细聊一聊
53 0