高并发网络框架Netty

Netty概述

  Netty是由Jboss提供的一个异步,基于事件驱动的高性能网络通信开源框架,可以快速的开发高性能,高可靠的网络IO程序,其实就是对Java原生IO的优化和重写。

  Netty主要是针对TCP协议下(TCP/IP->JDK原生IO->NIO->Netty),面向Client客户端的高并发应用,或者P2P场景下大量数据持续传输应用。

  Netty本质就是一个NIO框架,适用于服务端通讯相关的多种应用场景。

  在了解学习Netty之前必须要对NIO熟悉 https://www.cnblogs.com/songgj/p/14398390.html

Netty应用场景
  Netty作为一个基础的网络框架应用很广,一般有如下一些场景会使用到:

  1. 互联网行业
    在分布式系统中各个节点之间需要远程服务调用, 高性能的 RPC框架必不可少, Netty 作为异步高性能的通信框架, 往往作为基础通信组件被这些 RPC 框架使用。
    典型的应用有阿里分布式服务框架 Dubbo RPC 框架使用 Dubbo 协议进行节点间通信, Dubbo 协议默认使用 Netty 作为基础通信组件, 用于实现各进程节点之间的内部通信
  2. 游戏行业
    无论是手游服务端还是大型的网络游戏, Java 语言得到了越来越广泛的应用,Netty 作为高性能的基础通信组件, 提供了 TCP/UDP HTTP 协议栈, 方便定制和开发私有协议栈,

账号登录服务器,用户上线/下线感知等。
  3. 地图服务器之间可以方便的通过 Netty 进行高性能的通信。

  4. 大数据领域

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

  其它的使用到netty项目可以看这个地址 https://netty.io/wiki/related-projects.html

   

为什么要使用Netty

1、原生NIO存在的问题

  NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 SelectorServerSocketChannelSocketChannelByteBuffer 等。

  1. 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。

  2. 开发工作量和难度都非常大:例如客户端面临断连重连网络闪断半包读写失败缓存网络拥塞和异常流的处理等等。

  3. JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它会导致 Selector 空轮询,最终导致 CPU 100%。直到 JDK 1.7 版本该问题仍旧存在,没有被根本解决。

原文地址:https://www.cnblogs.com/songgj/p/14407152.html