You are on page 1of 4

高性能通信之Netty

在Java中,网络编程框架有很多,比如Java NIO、Mina、Netty、Grizzy等。但是在大家接触到的所有
中间件中,绝大部分都是采用Netty。

原因是Netty是目前最流行的一款高性能Java网络编程框架,它被广泛引用在中间件、直播、社交、游
戏等领域。谈及到开源中间件,大家熟知的Dubbo、RocketMQ、Elasticsearch、Hbase、RocketMQ
等都是采用Netty实现。

在实际开发中,今天来听课的同学,99%的人都不会涉及到使用Netty做网络编程开发,但是为什么还
要花精力给大家讲呢?原因有几个

在很多大厂面试的时候,会涉及到相关的知识点

Netty高性能表现在哪些方面
Netty中有哪些重要组件
Netty的内存池、对象池的设计
很多中间件都是用netty来做网络通信,那么我们在分析这些中间件的源码时,降低网络通信的理
解难度

提升Java知识体系,尽可能的实现对技术体系理解的全面性。

Netty中的ByteBuf组件以及拆包粘包详解
ByteBuf
在Netty中,还有另外一个比较常见的对象ByteBuf,它其实等同于Java Nio中的ByteBuffer,但是
ByteBuf对Nio中的ByteBuffer的功能做了很作增强,下面我们来简单了解一下ByteBuf。

ByteBuf的存储结构如图3-1所示,从这个图中可以看到ByteBuf其实是一个字节容器,该容器中包含三
个部分

已经丢弃的字节,这部分数据是无效的
可读字节,这部分数据是ByteBuf的主体数据,从ByteBuf里面读取的数据都来自这部分; 可写字
节,所有写到ByteBuf的数据都会存储到这一段
可扩容字节,表示ByteBuf最多还能扩容多少容量。

Netty中的拆包和粘包问题
TCP传输协议是基于数据流传输的,而基于流化的数据是没有界限的,当客户端向服务端发送数据时,
可能会把一个完整的数据报文拆分成多个小报文进行发送,也可能将多个报文合并成一个大报文进行发
送。

在这样的情况下,有可能会出现图3-1所示的情况。

服务端恰巧读到了两个完整的数据包 A 和 B,没有出现拆包/粘包问题;
服务端接收到 A 和 B 粘在一起的数据包,服务端需要解析出 A 和 B;
服务端收到完整的 A 和 B 的一部分数据包 B-1,服务端需要解析出完整的 A,并等待读取完整的 B
数据包;
服务端接收到 A 的一部分数据包 A-1,此时需要等待接收到完整的 A 数据包;
数据包 A 较大,服务端需要多次才可以接收完数据包 A。

电子书推荐
有一本书《Netty权威指南》 ,对于Netty部分内容的讲解比较详细,大家可以在边学习内容的同时,把
着本书快速翻一下,加深对Netty的理解。

新同学学习注意事项
目前内容正在讲解高并发部分内容,如果有些同学前面的课程没来得及听的,需要花时间去补,直接按
照下面的课程内容顺序来学习即可。

并发编程专题(Mic)
并发编程的发展以及价值
并发编程带来的挑战之同步锁
并发编程带来的挑战之可见性
并发安全只Lock锁及原理分析
线程阻塞唤醒wait/notfiy以及condition,死锁等原理分析
condition源码分析及基于condition实现阻塞队列
J.U.C并发工具集场景及原理分析
ThreadLocal&Fork/Join原理及实战
并发安全集合ConcurrentHashMap(1)
并发安全集合ConcurrenthashMap(2)
Java8新的异步编程方式CompletableFuture
站在架构的角度思考线程池的设计和原理

消息中间件(Allen)
RabbitMq入门及消息分发机制
RabbitMQ集群和高可用及持久化和内存磁盘管理
RabbitMQ消息可靠性和插件机制
Kafka架构和使用场景
Kafka集群部署及核心工作原理剖析
分布式消息中间件设计
kafka stream及Interceptor
Kafka优雅应用实战
RocketMQ架构方案详解
RocketMQ订阅机制及有序消息和定时消息详解
RocketMQ批量消息和事务及高性能实战
Pulsar介绍以及和Kafka的比较
消息中间件在大型互联网公司最佳实战

高性能存储专题(Mic)
站在全局视角理解系统高并发
解密Redis如何提升程序处理性能
Redis应用实战以及原理分析
Redis应用实战续篇
Redis高性能网络IO模型
Redis高性能底层原理揭秘
Redis高可用架构的搭建和原理分析
Redis高可用集群架构详解
关系型数据库层面的高并发优化
Sharding-JDBC分库分表应用实战
ShardingSphere读写分离及分布式事务详解
ShardingSphere基于Zookeeper实现分布式治理
深入分析ApacheZookeeper应用实战
Zookeeper应用实战之手写配置中心
Zookeeper应用实战之分布式锁及Leader选举实战和原理分析
Zookeeper核心原理及设计探索
Zookeeper源码分析之Leader选举算法分析
Zookeeper源码分析之Watcher机制
Zookeeper源码分析之Session管理

高性能网络通信篇(Mic)
分布式架构下的通信问题(9月4号)
高性能通信框架Netty简介(9月5号)
深入浅出Netty中拆包粘包(9月8号)
消息协议的设计及解析实战(9月11号)
数据传输过程中的序列化、反序列化原理(9月12号)

You might also like