原文地址:http://blog.csdn.net/chszs/article/details/40151331
Netty:一个非阻塞的客户端/服务器框架
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs
Netty是一个异步事件驱动的网络应用框架,为Java网络应用的开发带来了一些新活力。Netty由协议服务器和客户端所组成,可用于快速开发可维护的高性能软件。Netty应用框架及其工具简化了网络编程,而且由Netty社区进行维护。
Netty还被归类为NIO客户端/服务器框架,用它能够快速、简易地开发网络应用,使得TCP和UDP套接字服务器的网络编程得以简化和更加合理。
内建的HTTP协议支持WebSocket,允许框架运行在Servlet容器内。新版的Netty同时支持非阻塞I/O和阻塞I/O通信。
Netty的特性:
1、传输服务包括:套接字和数据报、HTTP通道、虚拟机内部管道
2、协议支持以下扩展:HTTP、Web Socket、Google Protocol Buffer、SSL-StartTLS、大文件传输、RTSP、Zlib或gzip压缩、二进制协议、其它遗留的文本格式
3、核心:可扩展的事件模型、统一通信API、零拷贝能力的富字节缓冲
Netty设计:
Netty在设计上针对多种传输类型,集成了一套统一的API、阻塞和非阻塞的套接字。Netty的事件模型是可扩展的,可以把关注点进行明确隔离。Netty的线程模型提供了在单线程或类SEDA这样的线程池之间选择的灵活性,而且线程是高可自定义的,对数据报的支持实现了真正的无连接通信,Netty的管道抽象与安全线程、动态可变性相结合,使得框架得到有力支撑。
注:SEDA,即Staged Event Driven Architecture,阶段化的事件驱动架构。SEDA的思路是将原先由一个线程完成的任务,分割为相对独立的多个阶段。每个阶段由专用的一组线程负责执行,阶段之间用过队列交互。采用SEDA方式,只有在并发量提高到一定程度,并发成为系统瓶颈时才能体现价值。就单个操作而言,由于队列的传递,其延迟一定是有所上升的。
可以参考这篇论文《SEDA: an Architecture for Well-Conditioned, Scalable Internet Services》
SEDA是加州大学伯克利分校研究的一套优秀的高性能互联网服务器架构模型,其设计目标是:支持大规模并发处理、简化系统开发、支持处理监测、支持系统资源管理。
两种目前广泛使用的网络服务器架构模型:
1)多线程服务器(Threaded Server)
工作原理:对于每一个request,dispatcher都会为其创建并分配一个线程,该线程负责这个请求的处理。此方式又名为(Thread-per-request)。
优点:执行粒度是整个完整的处理流程,处理逻辑清晰,易于开发。
缺点:当随着处理请求的不断增加,会导致并发执行的线程数量太多。过多的线程数量会导致系统在线程调度和资源争用上的开销过大,从而引起系统性能急剧下降,导致系统处理能力下降。
改进措施:引入线程池(Bounded Thread Pools)
系统最多只能创建一定数量的线程。当所有线程都饱和运行时,新到达的处理请求只能等待,或者被抛弃。
缺点:执行粒度仍然是完整的处理流程,难以检测系统性能瓶颈的根源以及进行相应调整。
2)事件驱动并发处理(Event-Driven Concurrency)
将处理流程分割成多个步骤,每一个步骤都实现为一个有限状态机(FSM)。
工作原理:所有的处理请求会作为Event进入系统,由Scheduler负责传递给相应FSM。FSM的处理结果也以Event形式输出给Scheduler。新的Event会再次被Scheduler进行转发给下一个FSM,直至处理完成。
优点:
1、随着处理量的增加,系统负荷是以线形增长。当达到系统饱和处理能力后,系统的处理能力不会下降。
2、由于将各处理步骤独立实现,易于进行系统监测和调整。
缺点:
Scheduler的设计和实现过于复杂,针对于不同的应用和系统的逻辑变更需要不同的实现。
SEDA架构
(近似于Event-Driven Concurrency,但是没有其中的Scheduler)将每一个处理步骤独立为一个Stage。
Stage结构:
1)一个接受输入的Event Queue;
2)一个应用开发者编写的Event Handler;
3)一个Controller用于对执行过程进行控制。包括并发线程数量、批处理数量等等;
4)一个Thread Pool用于并发处理;
Stage的输入通过Event Queue获得。Stage的输出会以Event形式推送到其他Stage的Event Queue中。Stage之间的这种连接关系由应用开发人员指定。
带来的问题:Event Queue尽管减少了模块间的耦合性,但是会降低响应速度。
性能及有效性:
Netty不仅提供了良好的稳定性,还提供了更好的吞吐量和更低的延迟性能,把内存复制限制到最低需求上,零拷贝能力富字节缓冲特性使内核能够管理DMA复制。这减少了CPU和系统总线的负担,提升了框架的有效性。
可扩展性与集成:
Netty有可扩展能力,支持扩展到上千种连接类型,而且在维持有效性的同时没有性能瓶颈。这些连接的可靠性都非常高,而且不会失效。Netty易于扩展和构建。Netty还提供了灵活的集成性能,可以与很多环境比如Linux、Java、C#、C++、Python等环境集成。
安全:Netty提供了完整的SSL/TLS和StartTLS支持。
Netty官方提供了很多指南、文档以及JavaDoc和例子供开发者参考。
Netty目前的最新稳定版是4.0.23版。
下载地址: http://dl.bintray.com/netty/downloads/netty-4.0.23.Final.tar.bz2
分享到:
相关推荐
7. **Netty底层原理**:探讨Netty如何利用Java NIO实现异步非阻塞I/O,以及零拷贝技术的工作机制,帮助读者理解Netty的高效性。 8. **案例分析**:通过实际项目案例,展示Netty在实际场景中的应用,如P2P下载、...
它是一个开源的Java库,广泛应用于服务器和客户端的开发,尤其在处理高并发、低延迟的网络服务时,Netty的表现尤为突出。Netty的核心是基于NIO(非阻塞I/O)和EventLoop事件驱动模型,这使得它能够在单线程或多线程...
标题中的“Netty实现Java服务端和C#客户端联通”是指使用Netty作为Java服务器框架,与C#客户端(使用DotNetty库)进行通信的一种技术实现。这涉及到跨平台的网络通信,以及两个不同编程语言间的交互。 Netty是Java...
标题中的“java服务器端(Netty_Proto)和c++客户端tcp通讯”表明这是一个关于使用Java的Netty框架和Google的Protocol Buffers(ProtoBuf)进行TCP通信的项目。Netty是一个高性能、异步事件驱动的网络应用框架,常...
在本文中,我们将深入探讨Netty的核心特性、工作原理以及如何构建一个简单的Netty服务器和客户端。 一、Netty概述 Netty由JBOSS组织开发并维护,它提供了一个灵活的、易用的API,让开发者可以轻松处理各种网络协议...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个压缩包包含的是 Netty 的一个实际应用示例,专注于客户端和服务器端的实现。以下是对这个“netty 包含...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨Netty 5.0版本,并通过一个客户端和服务器端的示例来理解其核心概念和功能。 Netty...
Netty是一个异步事件驱动的网络应用程序框架,它为高性能、高可用性的网络服务器和客户端提供了一种简单易用的方式。本实践将详细介绍如何在Android环境中使用Netty进行客户端和服务端的通信。 首先,我们需要理解...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在这个“netty客户端与服务器信息交互demo”中,我们将深入探讨Netty如何实现客户端和服务器之间的信息交换。...
Netty是一个高性能、异步事件驱动的网络应用框架,它为Java开发人员提供了构建高性能、高可用性的网络服务器和客户端的API。这个框架广泛应用于分布式系统、消息中间件、游戏服务器等领域,因其高效和易用性而备受...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何使用 Netty 4.0.31.Final 版本构建 Android 客户端和服务器端应用程序。 首先...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在游戏服务器领域,Netty 的优势在于它的灵活性、可扩展性和高效的性能,使得它成为构建游戏服务器核心层的...
Java应用程序中的Netty框架是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty广泛应用于分布式系统、云计算、大数据处理等领域,它的核心特性包括非阻塞I/O、...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在Android开发中,尽管原生的Socket API已经足够使用,但Netty因其高效、灵活和丰富的特性,成为了许多开发者...
Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。在Java世界中,Netty因其易用性、灵活性以及强大的性能而备受推崇,广泛应用于各种分布式系统、微服务架构以及高...
Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何使用Netty进行RTSP(Real Time Streaming Protocol)服务端的开发,以及如何处理H264...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何利用 Netty 实现客户端与服务器之间的通信。 首先,我们要理解 Netty 的核心...
在本篇关于“Netty框架学习——第一个Netty应用”的文章中,我们将深入理解如何使用Netty构建一个简单的Echo服务器和客户端。Netty是一个高性能、异步事件驱动的网络应用程序框架,广泛应用于Java领域的服务器开发。...
JBoss Netty是一个高性能、异步事件驱动的网络应用程序框架,它为快速开发可维护的高性能协议服务器和客户端提供了丰富的API。本篇文章将深入探讨如何利用JBoss Netty创建高效的Web Service客户端和服务端。 首先,...
* AIO:一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。 NIO的组成包括: * Buffer:与Channel进行交互,数据是从Channel读入Buffer中。 * Channel:负责读取和写入...