netty学习笔记二
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代表够了,一次类推。
===========================================================================================
粘包分包现象及解决方案、编解码:
还没有评论,来说两句吧...