Skip to content

Netty入门

1. 概述

ᅟᅠᅟᅠNetty是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。值得一提的是Netty的异步特性并不是指的异步IO,底层还是使用多路复用实现的。

ᅟᅠᅟᅠNetty是Trustin Lee(이강원,李康元)在2008年开发的。 其中Netty5.0已经废弃,目前主要使用的仍然还是Ntty4.x,原因是Netty5.0底层自己实现了新的一套AIO满足windows和linux的使用,但是代码实现太过于复杂,而且实际使用起来性能和简洁性并没有提高。考虑后期的维护成本过高,Netty团队2015年决定停止Netty 5.0的开发,将精力集中在维护和改进Netty 4.x版本上。

2. Netty的地位

ᅟᅠᅟᅠNetty在Java网络应用框架中的地位就好比:Spring框架在JavaEE开发中的地位(评价非常高了🦾)。以下的框架都使用了Netty,因为它们有网络通信需求:

  • Cassandra - nosql数据库
  • Spark - 大数据分布式计算框架
  • Flink - 大数据分布式计算框架
  • Hadoop - 大数据分布式存储框架
  • RocketMQ - 阿里开源的消息队列
  • ElasticSearch - 搜索引擎
  • gRPC - rpc框架
  • Dubbo - rpc框架
  • Spring 5.x - flux api完全抛弃了tomcat ,使用netty作为服务器端
  • Zookeeper - 分布式协调框架

3. Netty的优势

虽然Netty底层仍然是NIO,那么为何不直接使用Java中的NIO呢?
Netty vs NIO,工作量大,bug多

  • 需要自己构建协议
  • 解决TCP传输问题,如粘包、半包
  • epoll空轮询导致CPU100%
  • 对API进行增强,使之更易用,如FastThreadLocal => ThreadLocal,ByteBuf => ByteBuffer

Netty vs 其它网络应用框架

  • Mina由apache维护,将来3.x版本可能会有较大重构,破坏API向下兼容性,Netty的开发迭代更迅速,API更简洁、文档更优秀
  • 久经考验,21年的发展,Netty版本迭代如下
    • 2.x 2004
    • 3.x 2008
    • 4.x 2013
    • 5.x 已废弃(没有明显的性能提升,维护成本高)