Netty-基于NIO开发的网络通信框架

Netty介绍

        Netty 是一个利用 Java 的高级网络的能力, 隐藏其背后的复杂性而提供一个易于使用 API 的客户端/ 服务器框架。
        Netty 是一个广泛使用的 Java 网络编程框架,在 2011 年获得了 Duke's Choice Award 。它活跃和 成长于用户社区,像大型公司 Facebook Instagram 以及流行 开源项目如 Infinispan, HornetQ, Vert.x, Apache Cassandra 和 Elasticsearch 等,都利用其强大的对于网络抽象的核心代码。
有 了 Netty , 就 可 以 实 现 自 己 的 HTTP 服 务 器 , FTP 服 务 器 , UDP 服 务 器 , RPC 服 务 器 WebSocket服务器, Redis Proxy 服务器, MySQL Proxy 服务器等等,也可以自定义编解码协议, 实现自己的特定协议的服务器。

Netty 与 Tomcat

        Netty和 Tomcat 的区别就在于 通信协议 Tomcat 是基于 HTTP 协议的,他的实质是一个基于 HTTP 协议的web 容器,但是 Netty 不一样,能够通过 codec 自己来编码 / 解码字节流,支持多种通信协议,还能自定义协议,这就是Netty tomcat 最大的不同。

BIO和NIO

 

        BIO(阻塞型IO),读写socket时,要返回read/write必须先等请求消息来了/客户端收到消息,子线程才能进行下一个请求。

        NIO(非阻塞型IO、事件驱动),使用BIO通信时,在高并发的环境下,BIO的线程数量会比较多,占用系统资源较多,等待处理的时间会比较长。这时使用NIO的话,它可以用一个线程把accept、读写操作和请求处理的逻辑全部完成。如果没有任务安排,它会将线程休眠直到下一个事件来了再被唤醒继续工作,这样的一个线程被称作NIO线程。

Netty特性

        Netty的核心特性是 支持零拷贝的 bytebuf 缓冲对象 通用通信 api 可扩展的事件模型 ;它支持多种传输服务并且支持HTTP FTP 、二进制、文本、 WebSocket 等一系列常见协议,也支持自定义协议。

 

Netty的优势

并发高: BIO NIO
传输快:零拷贝( ByteBuf
封装好: API 简单,可扩展性强
其他:支持多种协议、用户基数大(使用广泛)、版本迭代快(社区活跃度高)。。。

Reactor线程模型

 

        Netty的模型是基于 Reactor 线程模型,是典型的事件驱动模型。在网络编程中,事件指的是 read 、 write、 bind connect close 等动作。 Reactor 线程模型有很多种, Netty 常用的是 Reactor 主从模型, 也可以基于Reactor 单线程模型和 Reactor 多线程模型进行灵活的配置。

Reactor单线程模型:一个Accept线程和一个NIO线程,NIO线程负责完成请求接收、IO读写、编解码、逻辑处理等工作

 

Reactor多线程模型: 多线程模型:相比于单线程模型,将非 IO 操作交由线程池处理。

 

Reactor主从模型:使用多个acceptor的NIO线程池,用于接受客户端的连接。其中mainReactor用于接收客户端请求并转发给subReactor。SubReactor(通常个数与cpu个数相等)负责通道的读写请求,非IO 请求(具体逻辑处理)的任务则会直接写入队列,等待 worker threads 进行处理。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值