玩转Netty,从“Hello World”开始!

如果在项目的开发中 , 要实现稳定的网络通信 , 就得考虑网络的闪断、客户端的重复接入、客户端的安全认证、消息的编解码、半包读写……大家好 , 我是老三 , 之前里 , 我们讨论了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,从“Hello World”开始!

文章插图
组成图-来源官方
  • Netty是一个开源的、单线程模型的 Java 网络编程框架 。
  • Netty基于 NIO  , 被广泛应用于各种网络应用程序开发 。
  • Netty支持多种协议 , 包括但不限于 HTTP、WebSocket、TCP、UDP 和 SSL/TLS 协议等 。
  • Netty 是非阻塞的 , 事件驱动的框架 。
  • Netty具有高性能、可扩展和易于使用的优点 。
Netty的现状?Netty 由 JBoss 社区开发维护的 , 它的社区相对比较活跃:
  • https://Github.com/netty/netty:Github已经收获31.2K星标
  • https://netty.io/:官方网站 , 提供了比较完整的文档
官方目前最新的版本是5.x, , 但是很不幸 , 已经被社区放弃开发维护 , 属于废弃版本 , 最新的稳定版本是4.x。
一般使用 , 推荐4.x , Netty 4.x对3.x不做兼容 , 我们后续的学习也基于Netty 4.x版本 。
谁在用Netty?作为最流行的网络通信框架 , 大量的公司选择它作为底层网络通信框架 , 包括不限于:
玩转Netty,从“Hello World”开始!

文章插图
使用Netty的公司
我们可能自己没有直接用过Netty , 但其实熟悉的很多开源中间件 , 都用到了Netty , 比如:
  • 服务治理:Apache Dubbo、gRPC 。
  • 大数据:Hbase、Spark、Flink、Storm 。
  • 搜索引擎:Elasticsearch 。
  • 消息队列:RocketMQ、ActiveMQ 。
用到Netty的优秀产品非常多 , 大家感兴趣可以看看:https://netty.io/wiki/related-projects.html 。
从"Hello World"开始气氛衬托到这 , 不写个Demo也过不去 , 还是从"Hello World"开始 , 我们领略一下Netty的风采 。
  1. 创建一个Maven项目:这个就不用多说了吧

玩转Netty,从“Hello World”开始!

文章插图
创建Maven项目


    推荐阅读