Netty之初识

262 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

前言

在现在的工作中第一次接触到了 Netty, 也是当前非常流行的 NIO框架, Netty在互联网领域, 游戏行业, 通信IM行业, 大数据分布式计算等领域都获得了广泛的应用

介绍

Netty介绍:

  • Netty是由JBOOS提供的一个开源框架
  • Netty是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可用的网络IO程序
  • Netty主要针对在TCP协议下, 面向Clients端的高并发应用, 或者在Peer-to-Peer场景下的大量数据持续传输的应用
  • Netty本质上是一个NIO框架, 适用于服务器通讯相关的多种应用场景

Netty的优势

Netty对自带的 JDK NIO进行了封装, 解决了直接使用 NIO的一些问题:

  • NIO的类库和API太过繁杂
  • 使用原生 NIO需要熟悉多线程编程, 因为 NIO编程涉及到 Reactor模式, 必须对多线程和网络编程非常熟悉, 才能写出高质量的 NIO程序
  • 原生 NIO开发难, 工作量大
  • JDK NIO中存在 Epoll bug, 会导致 Selector空轮询, CPU直接 100%

易上手使用:

  • 没有其他的依赖
  • 文档丰富的 Javadoc, 文档和示例
  • 网上众多 Netty实现的 Demo和项目可以很好的借鉴学习

性能:

  • 高性能 吞吐量更高
  • 延迟更低
  • 减少资源消耗 最小化内存复制(零拷贝)

对各种协议的全面支持:

  • TCP、UDP、SCTP、UDT

Netty的常见使用场景

1)互联网行业:在分布式系统中,各个节点之间需要远程服务调用,高性能的 RPC 框架必不可少,Netty 作为异步高性能的通信框架,往往作为基础通信组件被这些 RPC 框架使用。

典型的应用有:Hadoop的RPC框架Avro、RocketMQ以及主流的分布式通信框架Dubbox等等。

后续等 Netty系列结束之后有机会的话也会出一个专门用来学习 RPC的系列文章

2)游戏行业:无论是手游服务端还是大型的网络游戏,Java 语言得到了越来越广泛的应用。在以前很多项目都是使用 mina来作为通信模型, 但是由于 mina基本停止更新, 社区活跃度下降, 所以现在的技术选型基本都是转向社区更为活跃的 Netty。

Netty 作为高性能的基础通信组件,它本身提供了 CP/UDP 和 HTTP 协议栈。非常方便定制和开发私有协议栈,账号登录服务器,地图服务器之间可以方便的通过 Netty 进行高性能的通信。

3)大数据领域:在大数据领域内, 大多数框架都对 Netty进行了深度应用

例如经典的 Hadoop的高性能通信和序列化组件 Avro的 RPC框架,默认采用 Netty进行跨界点通信,它的 Netty Service基于 Netty框架二次封装实现。