如果在项目的开发中 , 要实现稳定的网络通信 , 就得考虑网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写……大家好 , 我是老三 , 之前里 , 我们讨论了JAVA的三种IO模型 , 提到了网络通信框架
为什么要用Netty?首先当然是NIO的使用 , 本身比较复杂 , 而且还存在一些问题 。
除此之外 , 如果在项目的开发中 , 要实现稳定的网络通信 , 就得考虑网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写……
所以 , 巧了 , 恰好有这么一个成熟稳定、性能强大、开箱即用的网络框架摆在我们面前 , 相比较Java NIO , Netty更加出色:
- 易用性: Netty 在 NIO 基础上进行了更高层次的封装 , 屏蔽了 NIO 的复杂性 , 大大降低了开发难度;Netty 提供了很多开箱即用的工具 , 例如常用的行解码器、长度域解码器等 , 不需要自己再实现 。
- 稳定性: Netty 更加可靠稳定 , 修复和完善了 JDK NIO 较多已知问题 , 例如臭名昭著的 select 空转导致 CPU 消耗 100% , TCP 断线重连 , keep-alive 检测等问题 。
- 可扩展性: Netty 的的可扩展性做的非常好 , 比如支持可定制化的线程模型 。
初识Netty什么是Netty?Netty官方是这么定义Netty的:
Netty 是一个异步事件驱动的网络应用程序框架 , 用于快速开发可维护的高性能协议服务器和客户端 。
文章插图
组成图-来源官方
- Netty是一个开源的、单线程模型的 Java 网络编程框架 。
- Netty基于 NIO , 被广泛应用于各种网络应用程序开发 。
- Netty支持多种协议 , 包括但不限于 HTTP、WebSocket、TCP、UDP 和 SSL/TLS 协议等 。
- Netty 是非阻塞的 , 事件驱动的框架 。
- Netty具有高性能、可扩展和易于使用的优点 。
- https://Github.com/netty/netty:Github已经收获31.2K星标
- https://netty.io/:官方网站 , 提供了比较完整的文档
一般使用 , 推荐4.x , Netty 4.x对3.x不做兼容 , 我们后续的学习也基于Netty 4.x版本 。
谁在用Netty?作为最流行的网络通信框架 , 大量的公司选择它作为底层网络通信框架 , 包括不限于:
文章插图
使用Netty的公司
我们可能自己没有直接用过Netty , 但其实熟悉的很多开源中间件 , 都用到了Netty , 比如:
- 服务治理:Apache Dubbo、gRPC 。
- 大数据:Hbase、Spark、Flink、Storm 。
- 搜索引擎:Elasticsearch 。
- 消息队列:RocketMQ、ActiveMQ 。
从"Hello World"开始气氛衬托到这 , 不写个Demo也过不去 , 还是从"Hello World"开始 , 我们领略一下Netty的风采 。
- 创建一个Maven项目:这个就不用多说了吧
文章插图
创建Maven项目