netty学习笔记二

本文详细介绍了Netty架构的五大组成部分,包括其可扩展的事件模型、统一的通讯API、零拷贝的ByteBuffer、应用层协议支持以及传输层服务。同时,深入探讨了Netty的模块组件如bootstrap、buffer、channel等,并解析了高性能序列化协议protobuf的基础原理与源码,展示了protobuf在序列化过程中的高效存储策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Netty架构,特性、模块组件、线程模型(Boss线程、worker线程)以及源码、

netty架构图

netty架构五部分

Extensible Event Model(可扩展的事件模型)

Universal Communication API(统一的通讯API)

Zero-Copy-Capable Rich Byte Buffer(零拷贝的Buffer)

Protocol Support(应用层协议支持)

Transport Services(传输层服务)

模块组件

bootstrap
Netty服务端及客户端启动类
buffer
缓冲相关,对NIO Buffer做了一些优化、封装
channel
处理客户端与服务端之间的连接通道
container
连接其他容器的代码,例如Spring
handler
实现协议编解码等附加功能,
logging 日志
util工具类

 

netty处理流程

1.标记Nio Selector唤醒状态

2.Selector注册

3.处理内部任务队列

4.处理selector自己的事件对应的逻辑

对应关系:

MainReactor = NioServerBoss
SubReactor =  NioWorker

===========================================================================================

高性能序列化协议protobuf及源码:

序列化协议基础
   基础类型int在内存中的原始序列化
   基于nio的序列化
   基于netty的序列化
对象序列化
   Java原始对象序列化
   ObjectInputStream,ObjectOutStream
   基于protobuf序列化
Protobuf序列化过程源码解析
Netty+Protobuf案例

protobuf是1-5个字节,它回去遍历判断 int a; 具体需要多少存储字节,int是4个字节32位;但是如果 a用不到这么多,就不会开辟这么多空间, protobuf为什么是5个字节,因为它要多大int,10000000   1是protobuf用作符号位,后面才是值,如果protobuf也是4个字节肯定不够用,所以每8位的最左边一位是protobuf用于作为标识的,如果是1则代表a的值用1个字节不够存,0代表够了,一次类推。

===========================================================================================

粘包分包现象及解决方案、编解码:

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值