netty
文章平均质量分 96
深入浅出netty源码
初念初恋
Java高级开发工程师,主要分享Java技术相关的东西,包括但不限于源码解析、面试宝典、日常问题排查、工作趣文等等。
展开
-
实战Netty!基于私有协议,怎样快速开发网络通信服务?
在工作中,我经常使用netty开发一些服务,掌握netty的工作原理,开发一些服务端以及客户端是非常简单,本篇文章,我们就以具体的协议来进行一个简单的服务的开发。原创 2023-06-04 10:49:44 · 1221 阅读 · 0 评论 -
Netty 源码分析系列(十八)一行简单的writeAndFlush都做了哪些事?
对于使用netty的小伙伴来说,我们想通过服务端往客户端发送数据,通常我们会调用ctx.writeAndFlush(数据)的方式。那么它都执行了那些行为呢,是怎么将消息发送出去的呢。在这个类中,我们主要看方法,源码如下。do {return;通过一个无限循环,保证可以拿到所有的节点上的ByteBuf,通过这个函数获取节点,我们进一步看它的实现,如下,它只会取出我们标记的节点。下面我们看下的方法源码。原创 2023-05-24 19:41:10 · 1596 阅读 · 1 评论 -
Netty 源码分析系列(十七)Promise详解
上篇文章我们讲解了 Netty 的 Future,本篇文章我就就来分析一下可写的 Future,也就是promise,Netty 中的 Promise 扩展自 Netty 的 Future。以上我们分析了 Netty 中的 Promise,知道了它是扩展自 Netty 的 Future,是一个可写的 Future。原创 2022-03-31 16:18:16 · 2668 阅读 · 0 评论 -
Netty 源码分析系列(十六)Future详解
JDK 中提供了 Future 接口,Future 代表了一个异步处理的结果。Netty 中对 JDK 的 Future 做了扩展。为了深入了解这两者的不同点,下面我们就来分析这两者的源码。以上我们分析了 JDK 提供的 Future 以及 Netty 的 Future 接口,下节我们来分析 Netty 中的PromisePromise是可写的Future, Future 自身并没有写操作相关的接, Netty 通过Promise对Future进行扩展,用于设置 I/O 操作的结果。原创 2022-03-30 08:53:57 · 789 阅读 · 0 评论 -
Netty 源码分析系列(十五)自定义解码器、编码器、编解码器
我们今天继续来分析 Netty 的编解码器,这次我们要自己动手实现自定义的编码器、解码器和编解码器。原创 2022-03-29 14:12:49 · 3800 阅读 · 0 评论 -
Netty 源码分析系列(十四)Netty 编解码器
在前面文章中,我们分别对解码器和编码器进行了讨论,其实针对编码和解码,Netty 还提供了第三种方式,那就是编解码器。编解码器顾名思义,就是结合了编码和解码功能的程序。编解码器能够把入站和出站的数据和信息转换都放在同一个类中,对于某些场景来说显得更实用。Netty 提供了抽象的编解码器类,能把一些成对的解码器和编码器组合在一起,以此来提供对字节和消息都相同的操作。这些类实现了和接口。原创 2022-03-18 11:08:25 · 1560 阅读 · 0 评论 -
Netty 源码分析系列(十三)Netty 编码器
上一篇我们讲解了解码器的相关知识,其中也提到了编码器的定义。编码器就是用来把出站数据从一种格式转换到另外一种格式,因此它实现了编码从消息到字节(编码从消息到消息(通过上述文章的讲解,我们对于编码器和解码器应该都有了一定的认识,其实针对编码和解码,Netty 还提供了第三种方式,那就是编解码器。原创 2022-03-15 10:02:01 · 523 阅读 · 0 评论 -
Netty 源码分析系列(十二)Netty 解码器
数据从一种特定协议格式到另一种格式的转换。处理编码和解码的程序通常被称为编码器和解码器。Netty 提供了一些组件,利用它们可以很容易地为各种不同协议编写编解码器。编解码其实可以分为两块,即编码和解码。要知道,在网络中数据都是以字节码的形式来传输的,而我们只能识别文本、图片这些格式,因此编写网络应用程序不可避免地需要操作字节,将我们能够识别的数据转换成网络能够识别的程序,这个过程称之为编解码。编码也称为序列化,它将对象序列化为字节数组,用于网络传输、数据持久化或者其他用途。原创 2022-03-14 14:49:08 · 1759 阅读 · 0 评论 -
Netty 源码分析系列(五)ChannelPipeline
ChannelPipeline 接口采用了责任链设计模式,底层采用双向链表的数据结构,将链上的各个处理器串联起来。不感兴趣的事件的传递减少开销,并排除掉特定的对此事件感兴趣的处理器的处理以提升性能。所包含的事件流比其他类中同样的方法都要短,利用这一点可以尽可能提高性能。至此,处理完成了第一个节点的处理,开始执行下一个节点并不断循环。至此完成了第一个节点的处理,开始执行下一个节点的不断循环。所以,处理出站事件时,数据传输的方向是从尾部节点。所以,处理入站事件时,数据传输的方向是从头部节点。原创 2022-03-02 14:08:04 · 949 阅读 · 0 评论 -
Netty 源码分析系列(六)字节缓冲区 ByteBuf(上)
网络数据传输的基本单位是字节,缓冲区就是存储字节的容器。在存取字节时,会先把字节放入缓冲区,再在操作缓冲区实现字节的批量存储以提升性能。Java NIO 提供了ByteBuffer作为它的缓冲区,但是这个类用起来过于复杂,而且也有些繁琐。因此,Netty 自己实现了ByteBuf以替代ByteBuffer。本篇文章就来介绍Netty自己缓冲区的作用。本文首先展示了ByteBuffer在写入模式和读取模式下内部的一个状态,然后分析了clear()与compact()方法的源码,最后讲解了。原创 2022-03-02 14:14:50 · 1653 阅读 · 0 评论 -
Netty 源码分析系列(十)Reactor 模型
说到 NIO、Netty,Reactor模型一定是绕不开的,因为这种模式架构太经典了,接下来我们就静下心来好好看看Netty的基石——Reactor模型。本文就带着大家看看 Reactor 模型,让大家对 Reactor 模型有个浅显而又感性的认识。原创 2022-03-07 18:29:55 · 989 阅读 · 0 评论 -
Netty 源码分析系列(七)字节缓冲区 ByteBuf(下)
在了解了 ByteBuffer 的原理之后,再来理解 Netty 的 ByteBuf 就比较简单了。ByteBuf 是 Netty 框架封装的数据缓冲区,区别于positionlimitflip等属性和操作来控制ByteBuffer的读写,ByteBuf通过两个位置指针来协助缓冲区的读写操作,分别是readIndex和writeIndex。readIndexwriteIndex和capacity通过以上对于ByteBuf的介绍,相信小伙伴们对于ByteBuf的原理也有了一定的了解。原创 2022-03-02 19:29:47 · 871 阅读 · 0 评论 -
Netty 源码分析系列(十一)Netty工作原理详解
上一篇文章我们对 Reactor 模型进行了详细的讲解,下面我们就来探究一下 Netty 模型,Netty 采用的就是 主从 Reactor 多线程模型。本篇文章主要讲解了 Netty 的工作原理及简单应用。下节我们来讲解 Netty 的编解码。原创 2022-03-09 16:56:55 · 962 阅读 · 0 评论 -
Netty 源码分析系列(三)Channel详解
前两篇文章我们已经对Netty进行了简单的了解和架构设计原理的剖析。相关文章链接如下:本篇文章我们就来开始对Netty源码的分析,首先我们来讲解 Netty 中Channel相关的功能和接口。Channel 顾名思义就是管道,代表网络 Socket 或能够进行 I/O 操作的组件的关系。这些 I/O 操作包括读、写、连接和绑定。简单的说,Channel 就是代表连接,实体之间的连接,程序之间的连接,文件之间的连接,设备之间的连接。同时它也是数据入站和出站的载体。查询当前 Channel 的状态。原创 2021-08-25 08:22:23 · 3469 阅读 · 0 评论 -
Netty 源码分析系列(八)Netty 如何实现零拷贝
上一篇文章我们就零拷贝原理进行了分析,一文彻底弄懂零拷贝原理本篇文章我们就来讲讲 Netty 的零拷贝,在这之前,我们先来了解一下 Java 是怎么实现零拷贝的。通过以上的介绍,相信小伙伴们对于Netty的零拷贝机制原理也有了一定的了解,有没有思考一个问题,当我们向缓冲区写入数据时,如果写入的数据超过设置的容量(capacity)怎么办?其实Netty 提供了动态扩容机制,有兴趣的小伙伴们可以自己去了解一下。我们下节来讲讲Netty的引导程序的源码分析。原创 2022-03-06 22:09:01 · 728 阅读 · 0 评论 -
Netty 源码分析系列(一)Netty入门
本篇文章主要讲解了 Netty 产生的背景、特点、核心组件及如何快速开启第一个 Netty 应用。后面我们会分析Netty架构设计Channel、字节缓冲区ByteBuf线程模型编解码引导程序等方面的知识。原创 2021-08-05 08:46:36 · 1556 阅读 · 0 评论 -
Netty 源码分析系列(二)Netty 架构设计
上一篇文章,我们对Netty做了一个基本的概述,知道什么是Netty以及Netty的简单应用。Netty 源码分析系列(一)Netty 概述本篇文章我们就来说说Netty的架构设计,解密高并发之道。学习一个框架之前,我们首先要弄懂它的设计原理,然后再进行深层次的分析。接下来我们从三个方面来分析 Netty 的架构设计。原创 2021-08-06 08:58:58 · 596 阅读 · 0 评论 -
Netty 源码分析系列(四)ChannelHandler介绍
想象一个流水线车间。当组件从流水线头部进入,穿越流水线,流水线上的工人按顺序对组件进行加工,到达流水线尾部时商品组装完成。可以将当做流水线,当做流水线工人。源头的组件当做event,如readwrite等等。本篇文章我们先来讲讲的相关知识,下面进入正文吧。以上就是关于的分析,相信你对也有一定的了解,下期我们再来分析的源码。原创 2021-08-28 07:45:49 · 1006 阅读 · 0 评论 -
Netty 源码分析系列(九)程序引导类Bootstrap
程序引导类(Bootstrap)可以理解为是一个程序的入口程序,在 Java 程序中,就是一个包含 main 方法的程序类。在 Netty 中,引导程序还包含一系列的配置项。本篇文章我们就来介绍 Netty 的引导程序。从上图可以看出,抽象类实现了Cloneable接口。那么为什么需要实现Cloneable接口呢?在 Netty 中经常需要创建多个具有类似配置或者完全相同配置的Channel。为了支持这种模式而又不避免为每个Channel都创建并配置一个新的引导类实例,因此被标记为了Cloneable。原创 2022-03-07 18:27:23 · 654 阅读 · 0 评论