【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 中进行处理 ;


目录
相关文章
|
7月前
|
Java
【Netty 网络通信】Netty 工作流程分析
【1月更文挑战第9天】Netty 工作流程分析
|
7月前
|
Java Unix Linux
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
当涉及到网络通信和高性能的Java应用程序时,Netty是一个强大的框架。它提供了许多功能和组件,其中之一是JNI传输。JNI传输是Netty的一个特性,它为特定平台提供了高效的网络传输。 在本文中,我们将深入探讨Netty提供的特定平台的JNI传输功能,分析其优势和适用场景。我们将介绍每个特定平台的JNI传输,并讨论其性能、可靠性和可扩展性。通过了解这些特定平台的JNI传输,您将能够更好地选择和配置适合您应用程序需求的网络传输方式,以实现最佳的性能和可靠性。
150 7
【Netty技术专题】「原理分析系列」Netty强大特性之Native transports扩展开发实战
|
7月前
|
设计模式 前端开发 网络协议
面试官:说说Netty的核心组件?
Netty 核心组件是指 Netty 在执行过程中所涉及到的重要概念,这些核心组件共同组成了 Netty 框架,使 Netty 框架能够正常的运行。 Netty 核心组件包含以下内容: 1. 启动器 Bootstrap/ServerBootstrap 2. 事件循环器 EventLoopGroup/EventLoop 3. 通道 Channel 4. 通道处理器 ChannelHandler 5. 通道管道 ChannelPipeline 这些组件的交互流程如下: ![image.png](https://cdn.nlark.com/yuque/0/2024/png/92791/1716
53 0
面试官:说说Netty的核心组件?
|
7月前
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点.
<数据结构>五道LeetCode链表题分析.环形链表,反转链表,合并链表,找中间节点
70 1
|
7月前
|
存储 C语言
链表—初始化指针变和创建新的节点------区别应用分析
链表—初始化指针变和创建新的节点------区别应用分析
|
7月前
|
存储 算法 C语言
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
【C/C++ 链表结构】探索链表迭代器:C++实现的深入分析与优化策略
154 0
|
7月前
|
前端开发 Java 网络安全
【Netty 网络通信】Netty 核心组件
【1月更文挑战第9天】【Netty 网络通信】Netty 核心组件
|
7月前
|
前端开发 网络协议 Java
Netty | 工作流程图分析 & 核心组件说明 & 代码案例实践
Netty | 工作流程图分析 & 核心组件说明 & 代码案例实践
412 0
|
7月前
|
网络协议 前端开发 Java
Netty Review - 核心组件扫盲
Netty Review - 核心组件扫盲
103 0
|
存储 缓存 NoSQL
跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
本文将要分享的是如何从零实现一套基于Netty框架的分布式高可用IM系统,它将支持长连接网关管理、单聊、群聊、聊天记录查询、离线消息存储、消息推送、心跳、分布式唯一ID、红包、消息同步等功能,并且还支持集群部署。
13531 1