栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 进行处理。

 

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1040709.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号