初识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应用越来越多
目录
相关文章
|
监控 Java API
SpringBoot 2.0 + 阿里巴巴 Sentinel 动态限流实战
前言 在从0到1构建分布式秒杀系统和打造十万博文系统中,限流是不可缺少的一个环节,在系统能承受的范围内既能减少资源开销又能防御恶意攻击。 在前面的文章中,我们使用了开源工具包 Guava 提供的限流工具类 RateLimiter 和 OpenResty 的 Lua 脚本分别进行 API 和应用层面的限流。
3632 0
叠加定理
叠加定理(Superposition principle)是物理学中的一个原理,它适用于线性系统,描述了当系统受到多个独立输入时,系统响应的叠加关系。 根据叠加定理,当一个线性系统同时受到多个输入时,系统的响应等于每个输入单独作用时系统的响应的叠加。换句话说,系统的总响应等于各个输入分别作用时系统的响应的总和。
801 0
|
Android开发
教你在Android手机上使用全局代理!
前言:在Android上使用系统自带的代理,限制灰常大,仅支持系统自带的浏览器。这样像QQ、飞信、微博等这些单独的App都不能使用系统的代理。如何让所有软件都能正常代理呢?ProxyDroid这个软件能帮你解决!使用方法及步骤如下: 一、推荐从Google Play下载ProxyDroid,目前最新版本是v2.6.6。
17684 0
|
7月前
|
传感器 缓存 JSON
中国供应网 item_search - 按关键词搜索商品接口对接全攻略:从入门到精通
中国供应网item_search接口是工业B2B采购核心工具,支持关键词组合搜索与多维度筛选,批量获取商品价格、规格、库存及供应商信息。本攻略详解接口调用、签名生成、分页获取、数据去重与工业场景优化,助开发者高效对接,适用于采购选品、竞品分析与市场调研。
|
开发框架 Dart 前端开发
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
【4月更文挑战第30天】对比 Flutter(Dart,强类型,Google支持,快速热重载,高性能渲染)与 React Native(JavaScript,庞大生态,热重载,依赖原生渲染),文章讨论了开发语言、生态系统、性能、开发体验、学习曲线、社区支持及项目选择因素。两者各有优势,选择取决于项目需求、团队技能和长期维护考虑。参考文献包括官方文档和性能比较文章。
916 0
【Flutter前端技术开发专栏】Flutter与React Native的对比与选择
|
存储 弹性计算 数据管理
阿里云对象存储OSS怎么收费?存储包流量包还是按量?
阿里云对象存储OSS收费有两种计费模式,即包年包月和按量付费,包年包月是指购买存储包、流量包来抵扣OSS产生的存储费核流量费,OSS标准(LRS)存储包100GB优惠价33元、500GB存储包半年162元、OSS存储包40GB一年9元,OSS流量包100G 49元/月
9458 2
阿里云对象存储OSS怎么收费?存储包流量包还是按量?
|
前端开发 Java 程序员
Spring Boot+Netty+Websocket实现后台向前端推送信息
学过 Netty 的都知道,Netty 对 NIO 进行了很好的封装,简单的 API,庞大的开源社区。深受广大程序员喜爱。基于此本文分享一下基础的 netty 使用。实战制作一个 Netty + websocket 的消息推送小栗子。
|
XML JSON 网络协议
【TCP/IP】自定义应用层协议,常见端口号
【TCP/IP】自定义应用层协议,常见端口号
670 3
|
前端开发 JavaScript Java
Springboot+Netty+WebSocket搭建简单的消息通知
这样,你就建立了一个简单的消息通知系统,使用Spring Boot、Netty和WebSocket实现实时消息传递。你可以根据具体需求扩展和改进该系统。
552 1
|
编解码 开发工具 Android开发
Android平台RTMP直播推送模块技术接入说明
大牛直播SDK跨平台RTMP直播推送模块,始于2015年,支持Windows、Linux(x64_64架构|aarch64)、Android、iOS平台,支持采集推送摄像头、屏幕、麦克风、扬声器、编码前、编码后数据对接,功能强大,性能优异,配合大牛直播SDK的SmartPlayer播放器,轻松实现毫秒级的延迟体验,满足大多数行业的使用场景。RTMP直播推送模块数据源,支持编码前、编码后数据对接
382 0

热门文章

最新文章