写在前面
这个专题是在经历公司项目后,准备沉淀下来的一点点心得和记录,算是对java领域网络编程的初探,网络编程领域还有很多需要学习和自己不足的地方,谨以自勉。
如果对你有一点点帮助,欢迎收藏、点赞、分享,或者私信交流。
一、netty简介
-
官网的描述
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients
Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端
其中几个关键字我们可以关注,这个是我们后续了解、学习netty的重点:
-
异步
-
事件驱动
-
易维护
-
高性能
-
-
netty的作者是Trustin Lee,韩国人,同时他也是Apache Mina的作者之一,但是
netty更像是他的亲儿子。事实也证明netty也不负众望一直保持着强劲的活力,下面是netty在GitHub上的一些数据表现
-
watch、fork、start
-
代码更新频率(小时级别)
-
心电图
-
-
netty是一款基于NIO(非阻塞I/O)开发的网络框架,与传统的BIO(阻塞式I/O)相比,它的并发性能得到了很大的提高,而且更节省资源,netty封装了很多NIO的细节,可以屏蔽NIO API带来的不便,并且设计优秀的线程模型让netty的应用更加灵活。
netty不仅仅是一个java网络领域的框架,netty涉及多线程技术、复杂数据结构、内存管理模型、设计模式及底层TCP的技术,所以,在接触netty过程中能接触到很多优秀前辈们留下来的瑰宝,值得反复学习琢磨。
二、行业应用情况
-
地位
netty在java网络框架中的地位就好比,spring框架在JavaEE开发中的地位
-
框架应用
- Cassandra - nosql 数据库
- Spark - 大数据分布式计算框架
- Flink - 大数据分布式新一代计算框架
- Hadoop - 大数据分布式存储框架
- Hbase - 为Hadoop提供类似BigTable服务的nosql
- RocketMQ - ali 开源的消息队列
- ElasticSearch - 分布式搜索引擎
- gRPC - google rpc 框架
- Dubbo - rpc 框架
- Spring 5.x - flux api 使用netty作为服务器端
- Zookeeper - 分布式协调框架
- …
三、优势
-
Java NIO存在的一些问题
- NIO的类库和API复杂,需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。
- 需要其他额外技能的铺垫,比如熟悉java多线程编程,因为NIO编程涉及到Reactor模式,必须对多线程编程非常熟悉
- 需要自己构建协议
- 解决TCP传输中,由于TCP滑动窗口存在导致的粘包、半包问题
- epoll 空轮训导致 CPU 100%(epoll bug)
-
netty较于NIO的优势
- 易用性:netty封装了Java NIO各种细节,提供了简单易用的API
- 高并发:netty基于Reactor构建线程模型,使具有吞吐量大,延迟短,速度快和资源消耗低
- 安全性:支持SSL/TLS和StartTLS支持
- 文档友好、丰富:javadoc完整,用户指南以及实用案例详细
- 社区支持:社区活跃,对于新功能迭代快,bug fix 快
四、学习路线
- Netty-浅谈JAVA NIO
- Netty-helloword
- Netty-功能模块
- Netty-粘包、半包
- Netty-编解码
- Netty-私有协议开发
- Netty-模块详解
- Netty-线程模型
- Netty-内存模型
- Netty-实战
- Netty-高性能之道
- Netty-安全
- Netty-源码分析
五、最后
简单介绍了netty在网络编程中的地位和优势,以及后面会持续更新文章的大体内容,如果你也想系统性了解netty,赶快点赞收藏献爱心吧,我们下一个文章见