netty实战 netty介绍和应用场景
netty的介绍
-
Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github上的独立项目。
-
Netty 是一个异步的、基于事件驱动的网络应用框架,用以快速开发高性能、高可靠性的网络 IO 程序。
-
Netty主要针对在TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的大量数据持续传输的应用。
-
Netty本质是一个NIO框架,适用于服务器通讯相关的多种应用场景
-
要透彻理解Netty , 需要先学习 NIO , 这样我们才能阅读 Netty 的源码。
netty 总体架构
Netty架构分析
Netty 采用了比较典型的三层网络架构进行设计,逻辑架构图如下所示:
-
Reactor 通信调度层,它由一系列辅助类完成,包括 Reactor 线程 NioEventLoop 以及其父类、NioSocketChannel/NioServerSocketChannel 以及其父类、ByteBuffer 以及由其衍生出来的各种 Buffer、Unsafe 以及其衍生出的各种内部类等。该层的主要职责就是监听网络的读写和连接操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件,例如连接创建、连接激活、读事件、写事件等等,将这些事件触发到 PipeLine 中,由 PipeLine 充当的职责链来进行后续的处理。
-
职责链 PipeLine,它负责事件在职责链中的有序传播,同时负责动态的 编排职责链,职责链可以选择监听和处理自己关心的事件,它可以拦截处理和向 后/向前传播事件,不同的应用的 Handler 节点的功能也不同,通常情况下,往往会开发编解码 Handler 用于消息的编解码,它可以将外部的协议消息转换成内部的 POJO 对象,这样上层业务侧只需要关心处理业务逻辑即可,不需要感知底层 的协议差异和线程模型差异,实现了架构层面的分层隔离。
-
业务逻辑处理层,可以分为两类:
3.1. 纯粹的业务逻辑处理,例如订单处理。
3.2. 应用层协议管理,例如HTTP协议、FTP协议等。
netty的应用场景
- 互联网行业
- 游戏行业
- 大数据行业
- 其它开源项目使用netty
IDEA 搭建 netty 应用工程
1、创建maven项目
2、添加 netty 依赖
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.52.Final</version>
</dependency>