Netty通信技术(一)

目录

一、简介

一、概述

二、核心架构

三、为什么使用Netty不使用Java原生NIO

四、在使用Netty的项目

二、Reactor模型

三、Netty对Reactor的实现

ChannelPipeline和ChannelHandler

 四、Netty使用的示例代码


一、简介

一、概述

        Netty是JBOSS提供的一个开源框架, 本质为网络应用程序框架, 提供了非阻塞的、事件驱动的网络应用程序框架和工具,便于快速开发出高性能、高可靠性的网络服务端以及客户端。

二、核心架构

        

上图是netty的核心架构,从官网上截取的, 有兴趣的可以去看看

核心:

  1. 可拓展的事件模型
  2. 统一的通信API,简化了通信编码
  3. 零拷贝和丰富的字节缓冲区

传输服务:

  1. 支持Socket和Datagram(数据报)
  2. HTTP传输
  3. In-VM Pipe(管道协议,JVM的一种进程)

协议支持:

  1. HTTP以及WebSocket
  2. SSL安全套接字协议支持
  3. Google Protobuf(序列化框架)
  4. 支持zlib、gzip压缩
  5. 支持大文件的传输
  6. RTSP(实时流传输协议, 是TCP/IP协议体系中的一个应用层协议)
  7. 支持二进制协议并且提供完整的单元测试

三、为什么使用Netty不使用Java原生NIO

Netty主要采用的也是NIO,并且是基于JDK中的NIO做了一些实现以及升级

主要有四点:

  1. Netty的API对开发者更友好,JDK中的API功能薄弱且复杂(如:ByteBuffer改为ByteBuf)
  2. Netty中采用了Reactor线程模型,能够保证自身的线程安全
  3. Netty能实现高可用,解决了一些传输的问题,如粘包、半包、断路重连等
  4. 解决了Bug,如JDK的NIO中epoll bug

四、在使用Netty的项目

  • 数据库: Cassandra
  • 大数据处理: Spark、Hadoop
  • Message Queue:RocketMQ
  • 检索: Elasticsearch
  • 框架:gRPC、Apache Dubbo、Spring5(响应式编程WebFlux)
  • 分布式协调器:ZooKeeper
  • 工具类: async-http-client

二、Reactor模型

Reactor线程模型是一种思想,不属于Java,也不属于Netty,其定义了三种角色

  • Reactor:用于监听和分配事件,将I/O事件分给对应的Handler。新的事件包括建立连接就绪、读就绪、写就绪。
  • Acceptor:处理客户端连接,并分配到处理器链中(可暂时简单理解为ServerSocketChannel)
  • Handler:将自身与事件绑定,执行非阻塞的读和写任务,从channel中读入,完成处理业务逻辑, 再将结果写入channel

通过这三种角色定义出三种NIO的模式

单Reactor-单线程模式 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值