【Java进阶营】netty源码分析(一) - 基本组件

【Netty 源码分析】 netty 源码分析 阅读详情

基本组成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GiJlgL6r-1650625844191)(//upload-images.jianshu.io/upload_images/24483793-26157847878c212c.png?imageMogr2/auto-orient/strip|imageView2/2/w/989/format/webp)]

从图中可以看出,netty主要涉及以下几个部分

  • NioEventLoop:netty的核心发动机,在死循环中select OP_READ/OP_ACCEPT事件
  • Channel:把NIO中SocketChannel封装成netty的NioSocketChannel(接收客户端连接后创建的channel);把NIO中ServerSocketChannel封装成netty的NioServerSocketChannel(netty server端启动时创建,绑定服务端端口);
  • ByteBuf:对channel中数据进行读写
  • Pipeline:把用户业务逻辑使用责任链串联起来,后面用户读写用户数据时会经过责任链中每个节点进行处理(接收到客户端连接创建NioSocketChannel时创建)
  • ChannelHandler:pipeline中的节点,负责处理具体的业务逻辑

基本流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L6jc65K8-1650625844206)(//upload-images.jianshu.io/upload_images/24483793-869d54d3684f1dda.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)]

NioEventLoop结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-608Ygszf-1650625844209)(//upload-images.jianshu.io/upload_images/24483793-ffae32cb78fa5d86.png?imageMogr2/auto-orient/strip|imageView2/2/w/845/format/webp)]

  • Group相关类:都从JDK提供的ExecutorService继承而来,因此明显是提供线程池相关的能力;在此我向大家推荐一个架构学习交流圈。交流学习伪鑫:1253431195(里面有大量的面试题及答案)里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多
  • Executor相关类:都从JDK提供的AbstractExecutorService继承而来

Channel结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e6cSM9lh-1650625844210)(//upload-images.jianshu.io/upload_images/24483793-579e0ee7b47a18b7.png?imageMogr2/auto-orient/strip|imageView2/2/w/992/format/webp)]

  • AbstractChannel:提供channel的基础功能包含unsafe/pipeline/eventLoop等
  • AbstractNioChannel:增加了Nio相关功能包含SelectableChannel/SelectionKey/readInterestOp等
  • AbstractNioMessageChannel:服务端channel基础类,提供服务端channel的doReadMessages/doWriteMessage抽象方法
  • AbstractNioByteChannel:客户端channel基础类,提供客户端channel的doReadBytes/doWriteBytes抽象方法
  • NioServerSocketChannel:服务端channel具体类,主要个性化的重写各个父类提供的抽象方法
  • NioSocketChannel:客户端channel具体类,主要个性化的重写各个父类提供的抽象方法
  • Unsafe相关类:Channel ~> AbstractChannel ~> AbstractNioChannel ~> AbstractNioByteChannel ~> NioSocketChannel 中分别有一个对应的内部类 Unsafe ~> AbstractUnsafe ~> AbstractNioUnsafe ~> NioByteUnsafe ~> NioSocketChannelUnsafe;Channel的IO操作都是委托给Unsafe,例如:read/write/bind/register/close等等
  • NioServerSocketChannel和NioSocketChannel几点区别:
    1. 向父类注册的事件不同,NioServerSocketChannel是accept, NioSocketChannel是read
    2. NioServerSocketChannel的read操作是指读取一条连接,NioSocketChannel是指读取IO数据
一位Java大牛结合自己的业务和平台多年来在Netty实践中积累的经验总结《Netty进阶之路:跟着案例学Netty》。 写在前面 Netty是当前业界应用最广泛的Java开源异步框架。Netty框架能显著降低异步开发的门槛,使开发人员聚焦业务逻辑,免于处理复杂的底层通信机制和线程模型,从而能够简单和快速地开发异步应用。时至今日,越来越多的国内公司开始使用Netty来构建应用,使用Netty的开发者也日益增加。 随着Netty应用的不断深入,大家在使用过程中也会遇到各种各样的问题。但是相比于Netty的火热,市面上有关于Netty的学习资源却很少。 于是有一位Java大牛结合自己的业务和平台多年来在Netty实践中积累的 阅读详情

相关推荐

netty实战源码

netty实战源码

价值百万的netty源码笔记,赶紧收藏

Netty是一个广受欢迎的异步事件驱动的Java开源网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端,有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器等等,如果你想知道Nginx是怎么写出来的,如果你想知道Tomcat和Jetty是如何实现的,如果你也想实现一个简单的Redis服务器,那都应该好好理解一下Netty,它们高性能的原理都是类似的。

m0_68103752的博客 506

Netty 完整依赖的jar包, 你只需要下载netty源码,再添加这些jar就可以编译通过了

亲测,你只需要下载netty源码,再添加这些jar就可以编译通过了。 Netty 版本:4.1.9 其他环境eclipse, jdk 1.6

Netty之优化与源码

1. 优化 1.1 扩展序列化算法 序列化,反序列化主要用在消息正文的转换上 序列化时,需要将 Java 对象变为要传输的数据(可以是 byte[],或 json 等,最终都需要变成 byte[]) 反序列化时,需要将传入的正文数据还原成 Java 对象,便于处理 目前的代码仅支持 Java 自带的序列化,反序列化机制,核心代码如下 // 反序列化 byte[] body = new byte[bodyLength]; byteByf.readBytes(body); ObjectInputStream

yiqiu1959的博客 280

javaNetty仿微信源码

很全,什么都有了,感谢.javaNetty仿微信源码j

【Python&RS】Rasterio库安装+基础函数使用教程

Rasterio是一个Python库,专门用于栅格数据的读写操作。它支持多种栅格数据格式,如GeoTIFF、ENVI和HDF5,为处理和分析栅格数据提供了强大的工具。RasterIO适用于各种栅格数据应用,如卫星遥感、地图制作等。这篇文章跟大家介绍一下Rasterio库的安装以及一些基本函数的使用教程,附带源码。

Remote Sensing迷途小书童 1万+

从实战出发,深入解读Netty底层核心源码,不得不说大佬就是大佬

Java多线程交互、Netty客户端与服务端短连接、Netty客户端与服务端长连接。

老男孩的架构路 825

Wireshark抓包实战:5个CTF比赛中高频出现的流量分析技巧(附真实案例)

本文分享了Wireshark在CTF比赛和实战渗透中的五个核心流量分析技巧。内容涵盖从宏观统计概览锁定可疑目标、深度解析ICMP与HTTP等协议、追踪重组完整会话流,到利用字符串搜索和命令行工具进行自动化分析。掌握这些高阶技巧能显著提升分析海量网络流量的效率与精准度。

rrr55的博客 261

Java NIO ServerSocketChannel与SocketChannel区别

ServerSocketChannel详解 SocketChannel详解

weixin_44371237的博客 753

LangGraph的容错机制:从节点失败到图级回滚

核心概念铺垫:讲解LLM应用容错与事务性的核心概念(幂等性、重试策略、降级策略、快照、回滚、原子性、一致性、隔离性、持久性、最终一致性),对比LangGraph容错机制与传统数据库ACID事务、Apache Airflow/Kubernetes Workflow/Kubeflow Pipelines容错机制的异同;LangGraph容错机制的演进历史:用markdown表格梳理LangGraph从0.0.1到1.5.0(截止202X年X月)的容错机制发展历程;节点级别的容错:重试与降级。

AI Python 编程之道的博客 172

matlab相机标定_实战 | 相机标定

点击“计算机视觉life”关注,置顶更快接收消息!本文阅读时间约5分钟什么是相机标定?我们为什么需要相机标定?相机标定就是确定相机内参和外参的过程,其结果精度会直接影响视觉系统后续工作的准确性。坐标系相机标定涉及到了四大坐标系,分别为:像素坐标系图像物理坐标系相机坐标系世界坐标系为了进行相机标定,必须已知世界坐标系中足够多的三维空间点坐标,找到这些空间点在图像中投影点的二维图像坐标,并建...

weixin_39747334的博客 765

Netty组件EventLoopGroup和EventLoop源码分析

一、UnSafe相关介绍 1、JAVA中Unsafe简介 为什么先介绍Unsafe这个东西呢?我们知道JDK中也有UnSafe,Java中的Unsafe类为我们提供了类似C++手动管理内存的能力。封装这一系列的native方法。并且是禁止我们开发者自己使用的。当然你可以通过反射进行获取。 JAVA中的UnSafe提供以下的功能 可以看到,java中的unsafe提供的都是至关重要的一些...

b379685397的博客 1万+

模拟量传输4-20ma电流

大家可能会非常熟悉RS232,RS485,CAN等工业上常用的总线,他们都是传输数字信号的方式。那么,我们用什么方式来传输模拟信号呢?工业上普遍需要测量各类非电物理量,例如温度、压力、速度、角度等,这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上。工业上最广泛采用的是用4~20mA电流来传输模拟量。 采用电流信号的原因是不容易受干扰,因为工业现场的噪声电压的幅度可能达到数V,但是噪声的功率很弱,所以噪声电流通常小于nA级别,因此给4-20mA传输带来的误差非常小;电流源内阻趋于无穷.

tangdongming的博客 1万+

Netty源码分析--认真系列(一)

Netty源码分析--认真系列(一)

java_rutu的博客 2056

自定义串口通讯协议

自定义串口通讯协议的实现方法

qq_44826038的博客 2173

Java对接(BSC)币安链 | BNB与BEP20的开发实践(三)水龙头 WEB3

这一节我们讲一个币安测试链如何获取到BNB、USDT等BEP20数字货币(水龙头)来让我们前期测试开发。如图:我们将创建的地址填入相应输入框,来获取到测试BNB以及其他BEP20数字币。发币可能需要交易等待,请耐心等待即可,交易完成后,币会到达您的地址内。上一节我们用代码来实现BNB转账、BEP20转账、链上交易监控。2.MetaMask(小狐狸)浏览器插件 🪜。使用EDGE浏览器可以在浏览器直接打开。使用Chrome浏览器,请使用🪜打开。基本工作就绪后,即可进行开发测试。3. 测试区块链浏览器 🪜。

大猩猩的专栏 2790

Netty 源码分析系列(一)Netty入门

本篇文章主要讲解了 Netty 产生的背景、特点、核心组件及如何快速开启第一个 Netty 应用。后面我们会分析Netty架构设计Channel、字节缓冲区ByteBuf线程模型编解码引导程序等方面的知识。

初念初恋的博客 1876

提升ARM Cortex-M系统性能的关键技术:TCM技术解析与实战指南

TCM技术为ARM Cortex-M处理器提供了宝贵的确定性性能提升手段,特别适合对时序敏感的实时应用。通过合理配置和优化,工程师可以显著提高系统性能、降低中断响应时间并优化功耗。随着嵌入式系统对实时性要求的不断提高,TCM技术将在工业控制、汽车电子、医疗设备等领域发挥更加重要的作用。未来,ARM处理器可能会进一步扩展TCM容量并优化其与其他内存子系统的协同工作方式,为开发者提供更强大的实时性能保障。

1681

netty源码分析一

前段时间比较忙,没有时间去学习啦,现在稍微好一点啦,看着自己年初定下的目标,还有很多没有完成的呀。从下阶段起学习netty框架啦,之前也了解netty框架,但是没有深入理解,现在好好学习一下。 学习netty框架之前,要了解java nio基本知识java nio常见的API有 channel  channel可以理解为通道,其中包括TCP/UDP还有文件 FileChannelDat

hy614的专栏 558

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Netty源码分析一启动流程剖析

1.initAndRegister()对channel进行初始化、注册,返回regFuture(promise对象)1.1 initmain(主线程中完成)创建NioServerSocketChannel (相当于Nio中的ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();mian往NioServerSocketChannel添加初始化器handlermain。

m0_74229735的博客 1635

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

一、netty源码分析之概述

作为Java程序员,netty大家应该都或多或少的接触过。netty作为一个异步事件驱动的网络框架被广泛使用。我们从netty的官网的一张图上可以看到netty有哪些特点: netty的核心能力有三点: 可扩展的事件模型 通用的通信API 有零拷贝能力的字节缓冲区 在这三种核心能力的基础上,扩展出了对多种协议和传输服务的支持。 当然netty的优点不仅仅如此,后面我们将会通过源码的方式来分析...

feijianke666的博客 277

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

netty4核心源码分析第二篇一netty源码架构

文章目录源码模块netty类设计总结 不同的netty版本代码量差距很大,4.1.8版本代码量达到快50万,所以推荐大家阅读4.0版本,但高版本与低版本核心的一些细节实现又各有特点 源码模块 transport 核心项目: tcp传输上层api的统一封装[包含nio,bio] codec: 核心项目[但非本系列重点,对协议有兴趣可以关注] buffer: 核心项目[本系列文章重点关注] handler: io事件处理的下游流机制设计实现 transport-native-epoll: transpor

小麒麟的博客 846

netty依赖_认真的 Netty 源码解析(一)

本文又是一篇源码分析文章,其实除了 Doug Lea 的并发包源码,我是真不太爱写源码分析。因为要花非常多的时间,而且很多地方需要反复组织语言。本文将介绍 Netty,Java 平台上使用最广泛的 NIO 包,它是对 JDK 中的 NIO 实现的一层封装,让我们能更方便地开发 NIO 程序。其实,Netty 不仅仅是 NIO 吧,但是,基本上大家都冲着 NIO 来的。个人感觉国内对于 N...

weixin_39853863的博客 1593

真香,腾讯内部的Netty学习进阶笔记

前段时间在Github上看到一条评论,说的是: Java程序员都要会Netty,不会的都是初级或者** 这种言论过于偏激。大家都是学技术的,大部分人进入这一行业都是为了更高的薪资(纯纯感兴趣的除外)每接触一门新的技术,就是一个目的——涨薪。关于Netty嘛,现在大厂招聘时岗位需求都有一条说要求会用或者熟悉Netty,但我敢说,绝大部分人对于Netty这个技术栈平时的接触肯定是不多的;大家只知道它是一个高性能、异步事件驱动的NIO框架,却从来没有深入研究过;目前很多的开源框架都开始将底层的通信框架切换到Ne

zybb166的博客 2469

惊艳!腾讯强推599页Netty进阶神技,完美诠释Netty

Netty 作为一个学Java的,如果没有研究过Netty,那么你只能算一个初等Java程序员。如果你想知道Nginx是怎么写出来的,如果你想知道Tomcat和Jetty是如何实现的,如果你想实现一个简单的Redis服务器,那都应该好好理解一下Netty,如果你要进阶,想了解Java服务器的深层高阶知识,Netty也绝对是一个必须要过的门槛。 今天要与大家介绍的文档是我从腾讯一位老友手上得来的关于Netty进阶的速成手册:内容涵盖Netty基础+入门+中级+高级+源码架构和行业应用,相比于市面上的一些资

Java圈全能架构师的博客 400

netty-组件与源码分析

Netty-组件 Bootstrap-引导 ​ 引导类的层次结构包括一个抽象的父类和两个具体的引导子类,如图所示。 ​ 服务器致力于使用一个父Channel来接受来自客户端的连接,并创建子Channel以用于它们之间的通信;而客户端将最可能只需要一个单独的、没有父Channel的Channel来用于所有的网络交互。 ​ 两种应用程序类型之间通用的引导步骤由AbstractBootstrap...

weixin_39169791的博客 517
下一篇: 阿里高级Java面试题,要去阿里的先过这些题
java364107
博客等级 码龄5年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值