Netty使用详解

Netty使用详解

netty概述

netty是一个高性能的NIO网络通信框架,是对NIO网络模型的封装,提供了一些简单,易用的Api,并且进行了许多优化操作,如零拷贝机制,高性能无所队列,内存池等优化策略。netty支持多种通信协议,如HTTP,webSoket等,并且针对数据通信拆包黏包的一些问题,netty也进行了许多拆包策略。

netty-bio

同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情就会进入阻塞等待状态,造成不必要的线程开销。
适用于连接数据小且连接固定的系统架构。

netty-Nio

异步非阻塞,在bio的架构上进行改进,引入channel(通道)、buffer(缓冲区)、selector(选择器)的概念,采用事件驱动的方式,使用单个线程就可以监听多个客户端通道,改进bio模式下线程阻塞等待造成的资源浪费。

为什使用netty

相较于使用jdk传统的NIo模型来说,netty,有以下几点优势

一、统一的API

他支持多种传输模型,如,阻塞,非阻塞,以及poll、epoll等模型

二、简易开发

可以使用少量的代码实现多线程Reactor模型以及主从多线程Reactor模型

三、自带边解码器

自带的边解码器,去解决TCP 黏包/拆包问题

四、自带各种通信协议

netty 支持 协议包括 TCP/ UDP. HTTP/HTTPS,WEBSOCKET,SPDY/HTTP2,MATT\COAP

五、更高的吞吐量

由于netty对JDKNIO进行了优化,它提供了更高的吞吐量,更低的延迟,以及更少的资源消耗和更少的内存复制

六、 安全性

它有完整的SSL/TLS的支持

七、活跃度

他有着良好的社区活跃度,经历了各种大的项目考验,在Dubbo,Zookeeper,RoketMQ中的项目,都有用到Netty

Netty能解决什么

netty能解决服务器承载更多用户访问的问题,netty的本质是和NIO扮演的角色是一样的,都是为了提升服务端的吞吐量,让用户获得更好的体验。

Netty结构以及核心组件作用

网络通信层

Bootstrap

负责客户端启动。并且链接远程的netty Server

ServerBootstrap

负责服务端的监听,用来监听指定的端口

Channer

负责网络通信的载体

事件调度层

eventLoopGroup

本质上是一个线程池,主要负责接受IO请求,并分配线程去处理请求

eventLoop

是一个具体的线程

服务编排层

channelPipeline

负责处理多个channelHandler,将多个channelhandler过程一个链,形成一个Pipeline

channelhandler

针对IO数据的一个数据处理器,数据接受后通过指定的Handler进行处理

channelhandlerContext

用来保存channelhandler的上下文信息

Reactor模型三个组件

reactor

负责将IO事件分配对应的Handel

Acceptor

处理客户端的连接请求

handlers

执行业务逻辑的读写操作

netty的三种Reactor线程模型

一、单线程单Reactor模型

单线程中连接进来都由一个线程处理:如下图所示
单线程单reactor
缺点:当某一个handler阻塞,会导致后续的客户端请求无法被处理

二、多线程单Reactor模型

请求过来后,由单个Reactor进行分发,多线程池异步进行处理
在这里插入图片描述
缺点:所有的Io请求都是由一个handler进行处理,会有性能瓶颈存在,在高并发场景中很可能因为单个reactor的阻塞或性能导致整个的吞吐量收到影响,会导致大量客户端连接超时,客户端会再次进行重试,反而会再次家中线程的负载,导致大量的消息积压和处理的超时

三、主从多线程Reactor模型

在这个模型中 由一个mainReactor惊喜客户端的连接请求,将连接请求传给subreactor ,subreactor可以配置多个 ,就提的IO炒作由subreactor完成绑定给对应的handler。mianreactor的职责没有变化,还是接受客户端的请求,然后再将接收到的请求交给subreactor进行分发
在这里插入图片描述

代码实现

引入依赖
在这里插入图片描述
服务端代码实现
在这里插入图片描述
客户端代码实现
在这里插入图片描述

总结

在网络应用编程中netty可以使得服务器可以获得更高的吞吐量,帮助解决网络通信中黏包/拆包问题,支持多种协议开发,以较少的代码实现网络通信开发。

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值