io.netty
文章平均质量分 93
码灵
爱码。
平时学习新的知识,看到了新的东西,记录下来。
展开
-
io.netty学习使用汇总
Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得 IO 操作结果。原创 2023-06-15 16:51:33 · 1004 阅读 · 0 评论 -
io.netty学习(十八)Promise 源码分析
上篇文章我们讲解了 Netty 的 Future,本篇文章我就就来分析一下可写的 Future,也就是 promise,Netty 中的 Promise 扩展自 Netty 的 Future。以上我们分析了 Netty 中的 Promise,知道了它是扩展自 Netty 的 Future,是一个可写的 Future。原创 2023-06-27 14:30:46 · 658 阅读 · 1 评论 -
io.netty学习(十七)Future 源码分析
JDK 中提供了 Future 接口,Future 代表了一个异步处理的结果。Netty 中对 JDK 的 Future 做了扩展。为了深入了解这两者的不同点,下面我们就来分析这两者的源码。以上我们分析了 JDK 提供的 Future 以及 Netty 的 Future 接口,下节我们来分析 Netty 中的PromisePromise是可写的Future, Future 自身并没有写操作相关的接,Netty 通过Promise对Future进行扩展,用于设置 I/O 操作的结果。原创 2023-06-27 02:45:00 · 684 阅读 · 0 评论 -
io.netty学习(十六)自定义解码器、编码器、编解码器
我们今天继续来分析 Netty 的编解码器,这次我们要自己动手实现自定义的编码器、解码器和编解码器。LineBasedFrameDecoder 类是基于换行的,意味着只要在接收数据时遇到以换行符\n或者回车换行符\r\n结尾时,就表明数据已经接收完成可以被处理了。LineBasedFrameDecoder 类继承自 ByteToMessageDecoder,并重写了decode方法。/** 帧的最大长度限制 *//** 帧超长时是否抛出异常 */原创 2023-06-27 00:45:00 · 2195 阅读 · 0 评论 -
io.netty学习(十五)Netty 编解码器
在前面文章中,我们分别对解码器和编码器进行了讨论。其实针对编码和解码,Netty 还提供了第三种方式,那就是编解码器。编解码器顾名思义,就是结合了编码和解码功能的程序。编解码器能够把入站和出站的数据和信息转换都放在同一个类中,对于某些场景来说显得更实用。Netty 提供了抽象的编解码器类,能把一些成对的解码器和编码器组合在一起,以此来提供对字节和消息都相同的操作。这些类实现了和接口。Netty 的编解码器抽象类主要有以下两种:(1)实现从字节到消息的编解码((2)实现从消息到消息的编解码(原创 2023-06-27 00:00:00 · 2112 阅读 · 0 评论 -
io.netty学习(十四)Netty 编码器
上一篇我们讲解了解码器的相关知识,其中也提到了编码器的定义。编码器就是用来把出站(针对本身来讲,发送都是出站,接收都是入站,不管是客户端还是服务端)数据从一种格式转换到另外一种格式,因此它实现了,类似于解码器,Netty 也提供了一组类来帮助开发者快速上手编码器,当然,这些类提供的是与解码器相反的方法,如下所示:编码从消息到字节(编码从消息到消息(通过上述文章的讲解,我们对于编码器和解码器应该都有了一定的认识,其实针对编码和解码,Netty 还提供了第三种方式,那就是编解码器。下节我们就来讲解一下。原创 2023-06-26 00:30:00 · 794 阅读 · 0 评论 -
io.netty学习(十三)Netty 解码器
编码和解码:数据从一种特定协议格式到另一种格式的转换。处理编码和解码的程序通常被称为编码器和解码器。Netty 提供了一些组件,利用它们可以很容易地为各种不同协议编写编解码器。编解码其实可以分为两块,即编码和解码。要知道,在网络中数据都是以字节码的形式来传输的,而我们只能识别文本、图片这些格式,因此编写网络应用程序不可避免地需要操作字节,将我们能够识别的数据转换成网络能够识别的程序,这个过程称之为编解码。编码也称为序列化,它将对象序列化为字节数组,用于网络传输、数据持久化或者其他用途。原创 2023-06-26 00:00:00 · 1693 阅读 · 0 评论 -
io.netty学习(十二)Netty 工作原理
上一篇文章我们对 Reactor 模型进行了详细的讲解,下面我们就来探究一下 Netty 模型,Netty 采用的就是 主从 Reactor 多线程模型。本篇文章主要讲解了 Netty 的工作原理及简单应用。下节我们来讲解 Netty 的编解码。原创 2023-06-25 08:46:27 · 677 阅读 · 0 评论 -
io.netty学习(十一)Reactor 模型
说到 NIO、Netty,Reactor模型一定是绕不开的,因为这种模式架构太经典了,接下来我们就静下心来好好看看Netty的基石——Reactor模型。本文就带着大家看看 Reactor 模型,让大家对 Reactor 模型有个浅显而又感性的认识。以上就是关于 Reactor 模型的详细介绍,相信看完的小伙伴对于 Reactor 模型也有了一定的认识,对于 Netty 的架构也更加深层次了解。下节我们继续深入 Netty 的源码。原创 2023-06-25 08:43:09 · 1026 阅读 · 0 评论 -
io.netty学习(十)Netty 程序引导类
程序引导类(Bootstrap)可以理解为是一个程序的入口程序,在 Java 程序中,就是一个包含 main 方法的程序类。在 Netty 中,引导程序还包含一系列的配置项。本篇文章我们就来介绍 Netty 的引导程序。从上图可以看出,抽象类实现了Cloneable接口。那么为什么需要实现Cloneable接口呢?在 Netty 中经常需要创建多个具有类似配置或者完全相同配置的Channel。为了支持这种模式而又不避免为每个Channel都创建并配置一个新的引导类实例,因此被标记为了Cloneable。原创 2023-06-22 00:00:00 · 809 阅读 · 0 评论 -
io.netty学习(八)零拷贝原理
无论是传统的 I/O 方式,还是引入了零拷贝之后,2 次DMA copy是都少不了的。因为两次 DMA 都是依赖硬件完成的。所以,所谓的零拷贝,都是为了减少 CPU copy 及减少了上下文的切换。CPU拷贝DMA拷贝系统调用上下文切换传统方法22read/write4内存映射12mmap/write4sendfile12sendfile202sendfile2splice02splice0。原创 2023-06-21 00:45:00 · 450 阅读 · 0 评论 -
io.netty学习(九)Netty 如何实现零拷贝
本篇文章我们就来讲讲 Netty 的零拷贝,在这之前,我们先来了解一下 Java 是怎么实现零拷贝的。通过以上的介绍,相信小伙伴们对于Netty的零拷贝机制原理也有了一定的了解,有没有思考一个问题,当我们向缓冲区写入数据时,如果写入的数据超过设置的容量(capacity)怎么办?其实Netty 提供了动态扩容机制,有兴趣的小伙伴们可以自己去了解一下。我们下节来讲讲Netty的引导程序的源码分析。原创 2023-06-21 01:00:00 · 396 阅读 · 0 评论 -
io.netty学习(七)字节缓冲区 ByteBuf(下)
在了解了 ByteBuffer 的原理之后,再来理解Netty 的 ByteBuf 就比较简单了。ByteBuf 是 Netty 框架封装的数据缓冲区,区别于positionlimitflip等属性和操作来控制ByteBuffer的读写,ByteBuf通过两个位置指针来协助缓冲区的读写操作,分别是readIndex和writeIndex。readIndexwriteIndex和capacity通过以上对于ByteBuf的介绍,相信小伙伴们对于ByteBuf的原理也有了一定的了解。原创 2023-06-21 00:00:00 · 492 阅读 · 0 评论 -
io.netty学习(六)字节缓冲区 ByteBuf(上)
网络数据传输的基本单位是字节,缓冲区就是存储字节的容器。在存取字节时,会先把字节放入缓冲区,再在操作缓冲区实现字节的批量存储以提升性能。Java NIO 提供了ByteBuffer作为它的缓冲区,但是这个类用起来过于复杂,而且也有些繁琐。因此,Netty 自己实现了ByteBuf以替代ByteBuffer。本篇文章就来介绍Netty自己缓冲区的作用。本文首先展示了ByteBuffer在写入模式和读取模式下内部的一个状态,然后分析了clear()与compact()方法的源码,最后讲解了。原创 2023-06-20 00:30:00 · 764 阅读 · 0 评论 -
io.netty学习(五)ChannelPipeline
我们在前面的文章中也对接口做了初步的介绍。Netty 源码分析系列(二)Netty 架构设计以上就是关于的源码分析,相信认真看完了,你就明白Channel和之间的关系。下节我们继续来剖析 Netty 的源码。原创 2023-06-20 00:15:00 · 875 阅读 · 0 评论 -
io.netty学习(四)ChannelHandler
先简略了解一下和的概念。想象一个流水线车间。当组件从流水线头部进入,穿越流水线,流水线上的工人按顺序对组件进行加工,到达流水线尾部时商品组装完成。可以将当做流水线,当做流水线工人。源头的组件当做event,如readwrite等等。本篇文章我们先来讲讲的相关知识,下面进入正文吧。以上就是关于的分析,相信你对也有一定的了解,下期我们再来分析的源码。原创 2023-06-20 00:00:00 · 1344 阅读 · 0 评论 -
io.netty学习(三)Channel 概述
前两篇文章我们已经对Netty进行了简单的了解和架构设计原理的剖析。本篇文章我们就来开始对Netty源码的分析,首先我们来讲解 Netty 中Channel相关的功能和接口。Channel 顾名思义就是管道,代表网络 Socket 或能够进行 I/O 操作的组件的关系。这些 I/O 操作包括读、写、连接和绑定。简单的说,Channel 就是代表连接,实体之间的连接,程序之间的连接,文件之间的连接,设备之间的连接。同时它也是数据入站和出站的载体。原创 2023-06-19 23:45:00 · 2771 阅读 · 0 评论 -
io.netty学习(二)Netty 架构设计
上一篇文章,我们对Netty做了一个基本的概述,知道什么是Netty以及Netty的简单应用。本篇文章我们就来说说Netty的架构设计,解密高并发之道。学习一个框架之前,我们首先要弄懂它的设计原理,然后再进行深层次的分析。接下来我们从三个方面来分析 Netty 的架构设计。io.netty学习使用汇总正是由于Netty 的分层架构设计非常合理,基于 Netty 的各种应用服务器和协议栈开发才能够如雨后春笋般得到快速发展。原创 2023-06-19 23:45:00 · 1258 阅读 · 0 评论 -
io.netty学习 (一)Netty入门
关于Netty的学习,最近看了不少有关视频和书籍,也收获不少,希望把我知道的分享给你们,一起加油,一起成长。前面我们对Java IOBIONIOAIO深入分析 Java IO (一)概述深入分析 Java IO (二)BIO深入分析 Java IO (三)NIO深入分析 Java IO (四)AIO本篇文章我们就开始对Netty来进行深入分析,首先我们来了解一下JAVA NIOAIO的不足之处。本篇文章主要讲解了 Netty 产生的背景、特点、核心组件及如何快速开启第一个 Netty 应用。原创 2023-06-19 10:24:00 · 2855 阅读 · 0 评论 -
深入分析 Java IO (四)AIO
前面我们对Java IOBIONIO进行了分析,本篇文章我们就来讲讲AIO的相关知识。从Java 1.7开始,Java 提供了AIO(异步I/O)。Java AIO 也被称为NIO2.0,提供了异步I/O的方式,用法和标准的I/O有非常大的差异。Java AIO 采用订阅-通知即应用程序向操作系统注册IO监听,然后继续做自己的事情。当操作系统发生IO事件,并且准备好数据后,在主动通知应用程序,触发相应的函数。Java BIO。转载 2023-06-15 17:19:54 · 610 阅读 · 0 评论 -
深入分析 Java IO (三)NIO
本篇文章我们就重点介绍NIO,下面进入正文,首先做个概述。NIO 中的 N 可以理解为,一种同步非阻塞的 I/O 模型,在 Java 1.4 中引入,对应的在java.nio包下。NIO 新增了等抽象概念,支持面向缓冲、基于通道的 I/O 操作方法。NIO 提供了与传统 BIO 模型中的Socket和相对应的和两种不同的套接字通道实现。NIO 这两种通道都支持阻塞和非阻塞两种模式。阻塞模式使用就像传统中的支持一样,比较简单,但是性能和可靠性都不好;非阻塞模式正好与之相反。转载 2023-06-15 17:18:39 · 212 阅读 · 0 评论 -
深入分析 Java IO (二)BIO
同步与异步,阻塞与非阻塞。转载 2023-06-15 17:20:02 · 175 阅读 · 0 评论 -
深入分析 Java IO (一)概述
I/O问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这个海量数据时代,数据在网络中随处流动。这个流动的过程中都涉及到I/O问题,可以说大部分 Web 应用系统的瓶颈都是I/O瓶颈。Java 的 I/O 类库在 Java 的 IO 体系中,类将近有 80 个,位于java.io基于字节操作的 I/O 接口:InputStream 和 OutputStream基于字符操作的 I/O 接口:Writer 和 Reader基于磁盘操作的 I/O 接口:File。转载 2023-06-15 17:06:48 · 330 阅读 · 0 评论