初识Netty

简介: Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是一个NIO客户端服务器框架,可以快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化了TCP和UDP套接字服务器等网络编程

1. Netty 是什么?

Netty是 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty是一个NIO客户端服务器框架,可以快速轻松地开发网络应用程序,例如协议服务器和客户端。它极大地简化了TCP和UDP套接字服务器等网络编程。

从Netty的架构图中我们可以看出Netty的核心有三点:

  • 零拷贝能力的缓冲
  • 通用通信API
  • 可扩展的事件模型

2.Netty往事回首

2.1 Netty作者

Netty是由Trustin Lee(韩国、Line公司)2004年开发。上边的图片就是作者本人,我在github上盗的图😝。Netty从开源至今也有16个年头了,不得不佩服作者的毅力,现在依旧是更新的很频繁。一直在紧追JDK的脚步。

2.2 Netty版本演变

  • 2004年6月 Netty2 发布

    声称是Java社区中第一个基于时间驱动的应用网络框架

  • 2008年10月 Netty3 发布

  • 2013年7月 Netty4 发布

  • 2013年12 发布Netty5.0.0.Alpha 1

  • 2015年11月废弃5.0.0

2.3 为什么废弃了5.0?

我们看下官方的解答,图片中红框中的话是Norman Maurer(德国、Apple公司、Netty主要维护者之一)给的解答,翻译过来的意思是,使用ForkJoinPool的主要变化增加了复杂性,并且没有表现出明显的性能优势。使所有分支保持同步也需要大量工作,而实际上并不需要它。所以他就提出要废弃这个版本,废弃5.0主要原因就是:

  • 过于复杂,并且性能上没有优势
  • 精力有限,维护不过来了。

3. 为什么选择Netty?

3.1 为什么舍近求远?

netty做的更多:

  • 支持常用的应用层协议
  • 解决传输问题:粘包、半包现象
  • 支持流量整形
  • 完善的断连、idle等异常处理

netty做的更好:

  • 规避了JDK NIO bug

    经典epoll bug:异常唤醒导致cpu 100%

  • api更有好、更强大

  • 隔离变化,屏蔽细节

3.2 为什么不选择其他?

  • Apache Mina

    Netty和Apache Mina是同一个作者,但是作者本人更推荐Netty,因为Netty是尝试从零开始重建Mina并解决已知的问题。

  • Sun Grizzly

    这个和Netty一样都是诞生于2004年,但是它的热度不如Netty,使用的人也比较少,目前已经不维护了,最近一次更新已经是三年前了。

  • Apache Switf NIO、ACE等

    其他语言的,不是java的所以不考虑。

  • Cindy

    声明周期短

  • Tomcat、Jetty

    通信部分还没有独立出来。

4. Netty社区现状

  • Github

    https://github.com/netty/netty

    目前Netty存在多个稳定版本,在github上stat23.9k、fork 11.4k。

应用现状:

  • 截止2020年6月,40000+项目使用。统计方法:依赖项中声明io.netty:netty-all
  • 截止2020年6月,有465名贡献者。
  • 最新发布的版本为4.1.50.Final。

5. 典型项目

  • 数据库:Cassandra
  • 大数据:Spark、Hadoop
  • Message Queue:Rocketmq
  • 检索:Elasticsearch
  • 框架:gRPC、Aparche Dubbo、Spring5
  • 分布式协调器:Zookeeper
  • 工具类:async-http-client

6.Netty的趋势

  • 更多流行协议的支持
  • 紧跟Jdk新功能步伐
  • 更多易用、人性化功能(ip地址黑白名单,流量整形等)
  • Netty应用越来越多
目录
相关文章
|
前端开发 网络协议 Dubbo
超详细Netty入门,看这篇就够了!
本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路。
93062 32
超详细Netty入门,看这篇就够了!
【IntelliJ IDEA】idea修改文件的file is read-only
【IntelliJ IDEA】idea修改文件的file is read-only
2620 0
|
网络协议 前端开发 安全
Netty
Netty
855 1
|
存储 Java API
Netty指南
Netty指南
326 2
|
机器学习/深度学习 分布式计算 搜索推荐
Netty(一)
Netty(一)
|
Java
“解密Netty中的BossGroup与WorkerGroup:他们之间的默契和配合“
“解密Netty中的BossGroup与WorkerGroup:他们之间的默契和配合“
1401 0
|
网络协议 前端开发 算法
配置之道:深入研究Netty中的Option选项
配置之道:深入研究Netty中的Option选项
812 0
|
消息中间件 存储 算法
RocketMQ 消息集成:多类型业务消息——定时消息
本篇将继续业务消息集成的场景,从使用场景、应用案例、功能原理以及最佳实践等角度介绍 RocketMQ 的定时消息功能。
RocketMQ 消息集成:多类型业务消息——定时消息
|
Java Go API
JDK21要来了,协程可以给Java带来什么
今年9月份,Java会最新的LTS版本的发布会带来一项重磅更新:协程在此之前,在JDK19中协程已经作为一个预览版的功能被放在了JDK中,本文将探讨一下使用协程后究竟可以为我们现在的Java应用解决什么问题,以及现在成熟的协程实现(Kotlin/Go),在最后会基于JDK20的协程实现分析下JDK部分的源码。协程是什么协程其实是很古老的概念,1963年就被提出。协程是一种协作式的程序执行流,只有当
6425 0
JDK21要来了,协程可以给Java带来什么