当前位置:首页 > 后端开发 > 基于NIO的Netty网络框架

基于NIO的Netty网络框架

7个月前 (05-27)47

     Netty是一个高性能、异步事件驱动的NIO框架,它提供了对TCP、UDP和文件传输的支持,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。

基于NIO的Netty网络框架 _ Java侠

Netty的优点有:

a、功能丰富,内置了多种数据编解码功能、支持多种网络协议。

b、高性能,通过与其它主流NIO网络框架对比,它的综合性能最佳。

c、可扩展性好,可通过它提供的ChannelHandler组件对网络通信方面进行灵活扩展。

d、易用性,API使用简单。

e、经过了许多商业应用的考验,在互联网、网络游戏、大数据、电信软件等众多行业得到成功商用。

Netty采用了典型的三层网络架构进行设计,逻辑架构图如下:

基于NIO的Netty网络框架 _ Java侠

第一层:Reactor通信调度层。该层的主要职责就是监听网络的连接和读写操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件,例如连接创建、连接激活、读事件、写事件等,将这些事件触发到Pipeline中,再由Pipeline充当的职责链来进行后续的处理。

 

第二层:职责链Pipeline层。负责事件在职责链中有序的向前(后)传播,同时负责动态的编排职责链。Pipeline可以选择监听和处理自己关心的事件。

 

第三层:业务逻辑处理层,一般可分为两类:a. 纯粹的业务逻辑处理,例如日志、订单处理。b. 应用层协议管理,例如HTTP(S)协议、FTP协议等。

 

我们都知道影响网络服务通信性能的主要因素有:网络I/O模型、线程(进程)调度模型和数据序列化方式。

在网络I/O模型方面,Netty采用基于非阻塞I/O的实现,底层依赖的是JDKNIO框架的Selector。

在线程调度模型方面,Netty采用Reactor线程模型。常用的Reactor线程模型有三种,分别是:

a、Reactor单线程模型:Reactor单线程模型,指的是所有的I/O操作都在同一个NIO线程上面完成。对于一些小容量应用场景,可以使用单线程模型。

b、Reactor多线程模型:Rector多线程模型与单线程模型最大的区别就是有一组NIO线程处理I/O操作。主要用于高并发、大业务量场景。

c、主从Reactor多线程模型:主从Reactor线程模型的特点是服务端用于接收客户端连接的不再是一个单独的NIO线程,而是一个独立的NIO线程池。利用主从NIO线程模型,可以解决一个服务端监听线程无法有效处理所有客户端连接的性能不足问题。Netty线程模型并非固定不变的,它可以支持三种Reactor线程模型。

在数据序列化方面,影响序列化性能的主要因素有:

a、序列化后的码流大小(网络带宽占用)。

b、序列化和反序列化操作的性能(CPU资源占用)。

c、并发调用时的性能表现:稳定性、线性增长等。

Netty默认提供了对GoogleProtobuf二进制序列化框架的支持,但通过扩展Netty的编解码接口,可以实现其它的高性能序列化框架,例如Avro、Thrift的压缩二进制编解码框架。

 

作者:DemonWang
来源链接:https://www.cnblogs.com/houziwty/p/6964467.html

标签: Netty

“基于NIO的Netty网络框架” 的相关文章

用netty实现tcp简单通信

用netty实现tcp简单通信

一般我们想要使用tcp通信,最原始的方法就是使用socket套接字,但是每次都要创建新的socket对象,并且在finally中关闭,好浪费资源,很麻烦。所以就是用netty...

Java Netty简介

Netty和Mina是Java世界非常知名的通讯框架。它们都出自同一个作者,Mina诞生略早,属于Apache基金会,而Netty开始在Jboss名下,后来出来自立门户netty.io(h...

如何优雅关闭 Netty服务

如何优雅关闭 Netty服务

Netty 中将写出数据分成了两个部分 第一部分先缓存起来 第二部分再通过 Java 原生的 SocketChannel 发送出去。 问题...

Netty应用UDP协议

Netty应用UDP协议

UDP是用户数据报协议(User Datagram protocol)的简称,其主要作用是将网络数据封装成数据报形式,提供面向服务的简单信息传送服务...

浅析Netty的异步事件驱动(二)

上一篇文件浅析了Netty中的事件驱动过程,这篇主要写一下异步相关的东东。 首先,什么是异步了? 异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际...

Netty的介绍与使用--第三天(Netty的介绍与简单的使用)

Netty的介绍与使用--第三天(Netty的介绍与简单的使用)

Netty的介绍与使用--第三天(Netty的介绍与简单的使用) 1.Netty说明...

Netty之网络编程阻塞篇

1.什么是阻塞? 阻塞模式下,相关方法都会导致线程暂停 ServerSocketChannel.accept 会在没有连接建立时让线程暂停...

Netty源码分析 (十)----- 拆包器之LineBasedFrameDecoder

Netty 自带多个粘包拆包解码器。今天介绍 LineBasedFrameDecoder,换行符解码器。 行拆包器 下面,以一个具体的例子来看看业netty自带的拆包器是如何...

Netty指南(1):Netty简介

Netty指南(1):Netty简介

一、Netty介绍与应用场景 1.1 Netty 的介绍 Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 G...

[Netty]

[Netty]

  Java中的NIO是一种解决阻塞式IO问题的基本技术,但是NIO的编写对java程序员是有比较高的要求的。那么Netty就是一种简化操作的一个成熟的网络IO编程框架。这里简单介绍一个...