`

Netty基本概念

阅读更多

原文请参考微信公众账号(包含图文):https://mp.weixin.qq.com/s/8zyoj-FGyepXb5UkA1CqYw 

Netty基本概念

原创: 千本樱 后端技术笔记 9月28日

ByteBuf

ByteBuf:设计ByteBuf是为了在Netty的pipeline中传输数据,是数据传输数据的容器,功能类似于JDK中的ByteBuffer;

使用引用计数器来处理池化的ByteBuf,当ByteBuf处理完后,需确保引用计数器被调整,使用 ReferenceCountUtil.release() 来释放资源

ByteBuf作用:(1)可以自定义缓冲类型(2)通过一个内置的复合缓冲类型实现零拷贝 (3)扩展性好 (4)不需要调用 flip() 来切换读/写模式 (5)读取和写入索引分开 (6)方法链 (7)引用计数 (8)pooling资源池

ByteBuf中有2个索引:读索引和写索引;写入数据到ByteBuf后,writeIndex增加写入的字节,从ByteBuf读取字节后,readIndex增加读取的字节数,当writeIndex和readIndex处于相同位置时,数据读取完成,否则将抛出越界异常IndexOutOfBoundsException;ByteBuf初始化时readerIndex和writerIndex都处于0位置

ByteBuf中以read、write开头的方法都将增加相应的索引;可以为ByteBuf设置最大容量值,默认容量值为Integer.MAX_VALUE;

ByteBuf 类似于一个字节数组,最大的区别是读和写的索引可以用来控制对缓冲区数据的访问

ByteBuf容量:0 <= readerIndex <= writerIndex <= capacity。

ByteBuf中已读取过的字节,调用discardReadBytes()方法来回收空间,增加ByteBuf中可用的空间,readableBytes()返回可读字节数(this.writerIndex - this.readerIndex),writableBytes()返回可写字节容量(this.capacity - this.writerIndex)

标记或重设读/写索引位置:markReaderIndex(), markWriterIndex(), resetReaderIndex() 和 resetWriterIndex()

clear() 可以同时设置 readerIndex 和 writerIndex 为 0,但不会清除内容中的内容

Channel生命周期

channelUnregistered:channel已创建但未注册到一个 EventLoop. channelRegistered:channel 注册到一个 EventLoop. channelActive:channel 变为活跃状态(连接到了远程主机),可以接收和发送数据了 channelInactive:channel 处于非活跃状态,没有连接到远程主机

ChannelHandler

当 ChannelHandler 添加到 ChannelPipeline,或者从 ChannelPipeline 移除后,handlerAdded、handlerRemoved、exceptionCaught将会被调用;

handlerAdded:当 ChannelHandler 添加到 ChannelPipeline 调用 handlerRemoved:当 ChannelHandler 从 ChannelPipeline 移除时调用 exceptionCaught:当 ChannelPipeline 执行抛出异常时调用

ChannelHandler扩展

ChannelInboundHandler:处理进站数据和所有状态更改事件 ChannelOutboundHandler:处理出站数据,提供了出站操作时调用的方法,这些方法会被 Channel, ChannelPipeline, 和 ChannelHandlerContext 调用; ChannelPromise:是特殊的ChannelFuture,一个新的 ChannelPromise将会创建并且通过 ChannelPipeline传递

ChannelPipeline中一系列的ChannelHandler入站和出站操作:

ChannelPipeline

ChannelPipeline:是一系列的ChannelHandler实例,ChannelHandler流经一个 Channel 的入站和出站事件可以被ChannelPipeline 拦截,ChannelPipeline能够让用户自定义入站/出站事件的处理逻辑,以及pipeline里的各个Handler之间的交互;每当一个新的Channel被创建,都会建立并绑定一个channelPipeline;ChannelPipeline 有着丰富的API调用动作来回应入站和出站事件

可以动态添加和删除 ChannelHandler来修改ChannelPipeline

ChannelHandlerContext

在ChannelHandler 添加到 ChannelPipeline 时会创建一个ChannelHandlerContext实例,代表了 ChannelHandler 和ChannelPipeline 之间的关联

ChannelPipeline, Channel, ChannelHandler 和 ChannelHandlerContext 的关系:

(1)Channel绑定到ChannelPipeline (2)ChannelPipeline 绑定到 包含 ChannelHandler 的 Channel上 (3)当添加 ChannelHandler 到 ChannelPipeline 时,ChannelHandlerContext 被创建 

从一个handler转到下一个handler要通过调用ChannelHandlerContext中write相关的方法来实现

 

 

 

 
 

微信扫一扫
关注该公众号

分享到:
评论

相关推荐

    用netty实现文件传输

    1. **Netty 基本概念** - **BossGroup 和 WorkerGroup**:Netty 中的核心概念,BossGroup 负责接收新进来的连接,而 WorkerGroup 负责处理这些连接上的读写事件。 - **ChannelHandler**:处理 Channel 上的各种...

    netty原理的讲解

    在Netty讲解-基础的压缩包中,可能包含了关于Netty基本概念、Channel、EventLoop、ByteBuf、Handler、Pipeline等组件的介绍,以及如何创建简单的Netty服务器和客户端的示例代码。这些内容将帮助初学者快速理解和上手...

    使用 netty实现一个简单的聊天室

    1. **Netty 基本概念** - **BossGroup 和 WorkerGroup**:在 Netty 中,BossGroup 负责接收新的连接请求,而 WorkerGroup 处理实际的 I/O 读写操作。这种多线程模型确保了高并发性能。 - **ChannelHandler**:处理...

    netty小例子

    下面是对 Netty 基本概念的详细解释: 1. **ByteBuf**: Netty 自定义的缓冲区类,比 Java 的 `ByteBuffer` 更加高效,提供了更丰富的操作方法,如读写、复制等。 2. **Channel**: 表示网络连接,可以是 TCP 连接、...

    netty从入门到精通所有代码

    1. **Netty 基本概念** - **NIO (Non-blocking I/O)**:Netty 是基于 Java NIO 构建的,允许在单个线程中处理多个连接,提高系统资源利用率。 - **EventLoop(事件循环)**:Netty 中的核心组件,负责处理 I/O ...

    nettyexample

    1. **Netty 基本概念** - **异步事件驱动**:Netty 使用非阻塞 I/O(NIO)模型,通过事件循环(EventLoop)和事件处理器链(ChannelHandler)来处理并发连接,提高系统性能。 - **通道(Channel)与处理器链...

    Netty进阶之路-跟着案例学Netty

    本书首先会介绍Netty的基本概念,包括其非阻塞I/O模型、事件驱动架构以及Channel、EventLoop、Buffer等核心组件。接着,通过一系列逐步进阶的案例,如构建简单的Echo服务器、处理HTTP请求、实现WebSocket通信,读者...

    netty-netty-4.1.19.Final.zip_netty_netty学习_rocketmq

    在深入探讨Netty与RocketMQ的关联之前,我们先来详细了解一下Netty的基本概念和核心特性。 Netty的核心设计理念是基于Reactor模式,这是一种事件驱动的设计模式,它使得Netty能够高效地处理并发连接。在Netty中,...

    netty官网学习手册中文版

    这个“netty官网学习手册中文版”针对的是Netty的3.1版本,虽然现在的Netty已经发展到了5.x版本,但3.1版本的知识仍然具有历史参考价值,特别是对于那些初次接触或需要理解Netty基础概念的开发者来说。 1. **Netty...

    Netty权威指南完整版高清pdf

    该书首先介绍了Netty的基本概念,包括其设计理念、核心组件以及与其他网络编程模型的区别。Netty的核心组件主要包括Bootstrap、ServerBootstrap、Channel、Pipeline、Handler等,它们协同工作以实现高效的网络通信。...

    Netty入门教程文档

    Netty是Java的网络编程框架,广泛应用于数据采集服务中,本文将对Netty的基本概念和应用进行详细介绍,并将其与ETL技术结合,讲解如何使用Netty进行数据流转和处理。 1. ETL概述 ETL(Extract、Transform、Load)...

    learning-netty.zip

    - **基础篇**: 介绍Netty的基本概念和架构,包括Channel、EventLoop、Pipeline等。 - **进阶篇**: 针对ByteBuf的使用、编码与解码、心跳机制等进行深入解析。 - **源码分析篇**: 分析Netty关键组件的内部实现,如...

    netty5.0官方自带的demo

    在本文中,我们将深入探讨Netty 5.0官方提供的示例(demo),这些示例是学习和理解Netty核心概念与功能的重要资源。 1. **Netty的异步模型** Netty基于Java NIO(非阻塞I/O)构建,其核心是事件驱动和异步处理。在...

    netty1.zip

    1. **Netty 的基本概念**: - **ByteBuf**: Netty 提供了自己的缓冲区类 ByteBuf,比 Java NIO 中的 ByteBuffer 更加强大和灵活,支持读写分离,便于处理网络数据。 - **Channel**: 代表一个网络连接,如套接字或...

    netty框架图及netty面试知识点解析

    1. Netty的基本架构:如Channel、EventLoop、ChannelHandlerContext等核心概念。 2. Netty的线程模型:如何实现高效的事件驱动和异步处理。 3. 编解码器:如何使用和编写自定义的编解码器处理粘包与半包问题。 4. ...

    netty实现的聊天代码

    通过阅读和学习这个代码,你可以掌握 Netty 的基本架构,包括服务器和客户端的创建、事件驱动模型、ChannelPipeline 的配置,以及数据编解码等关键概念。这对于进一步研究高并发、高性能的网络应用开发非常有帮助。

    netty权威指南 第二版 李林锋pdf

    1. **Netty的基本概念**:Netty是一个基于NIO(非阻塞I/O)的Java框架,它简化了网络编程,提供了线程模型、缓冲区、编码解码器、管道和事件驱动架构等核心概念。通过这些概念,开发者可以高效地处理网络连接和数据...

    netty框架 jar包

    Netty的事件驱动模型基于“事件循环”(Event Loop)和“管道”(Channel Pipeline)的概念。事件循环是Netty中的核心组件,负责处理I/O事件,并将这些事件分发到对应的处理器。管道则是一系列处理器的链,每个...

    Netty IN Action中文版

    Netty 是一个高性能、异步...通过阅读《Netty IN Action》中文版,你不仅能够理解Netty的基本概念,还能学会如何利用它构建高效、可靠的网络应用。无论你是初学者还是有经验的开发者,这本书都能为你提供宝贵的指导。

Global site tag (gtag.js) - Google Analytics