“Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.

一、什么是Netty

简介

“Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.

这不是我刻意秀(我英语也菜鸡),这是Netty官网的一句话,翻译过来就是Netty 是一个异步的、基于事件驱动的网络应用框架,用于快速开发可维护、高性能的网络服务器和客户端。

简单来说Netty就是一个基于Java开发的一个网络应用框架,是一个基于NIO的客户、服务器端的编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户、服务端应用。Netty相当于简化和流线化了网络应用的编程开发过程,例如:基于TCP和UDP的socket服务开发。

地位

Netty在网络应用框架的地位,就和Spring在JavaEE开发中的地位一样,有句话说的好

“作为一个学Java的,如果没有研究过Netty,那么你对Java语言的使用和理解仅仅停留在表面水平,会点SSH,写几个MVC,访问数据库和缓存,这些只是初等Java程序员干的事。如果你要进阶,想了解Java服务器的深层高阶知识,Netty绝对是一个必须要过的门槛。”

由此可见Netty的地位之高。

那么Netty到底用来做什么呢?

有了Netty,你可以实现自己的HTTP服务器,FTP服务器,UDP服务器,RPC服务器,WebSocket服务器,Redis的Proxy服务器,MySQL的Proxy服务器等等。

以下的框架都使用了 Netty,因为它们有网络通信需求!

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

二、网络编程

早期的网络编程人员,需要花费大量的时间在C语言的套接字库,去处理在不同的操作系统上出现的各种奇奇怪怪的问题

而那些最早期的Java Api也只只支持由本地套接字库提供的所谓的阻塞函数

Java网络编程