Netty:一个非阻塞的客户端/服务器框架

简介: Netty:一个非阻塞的客户端/服务器框架 Netty是一个异步事件驱动的网络应用框架,为Java网络应用的开发带来了一些新活力。Netty由协议服务器和客户端所组成,可用于快速开发可维护的高性能软件。
Netty:一个非阻塞的客户端/服务器框架

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

目录
相关文章
|
9天前
|
Java
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
Java使用FileInputStream&&FileOutputStream模拟客户端向服务器端上传文件(单线程)
26 1
|
16天前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
31 6
|
13天前
|
关系型数据库 MySQL Linux
数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)
无论是对于初学者还是有经验的开发者,了解MySQL的安装、客户端使用、数据类型、运算符和语法规范都是至关重要的。这不仅有助于高效地管理和查询数据,而且对于设计和实现数据库解决方案来说是基础工作。通过深入学习和实践这些知识,您可以更好地发挥MySQL数据库的强大功能。
13 2
|
14天前
|
网络协议 安全 Unix
6! 用Python脚本演示TCP 服务器与客户端通信过程!
6! 用Python脚本演示TCP 服务器与客户端通信过程!
|
15天前
|
JSON 前端开发 JavaScript
Web中的客户端和服务器端
Web中的客户端和服务器端
|
4天前
|
JSON API 数据格式
基于服务器响应的实时天气数据进行JSON解析的详细代码及其框架
【8月更文挑战第25天】这段资料介绍了一个使用Python从服务器获取实时天气数据并解析JSON格式数据的基本框架。主要分为三个部分:一是安装必要的`requests`库以发起HTTP请求获取数据,同时利用Python内置的`json`库处理JSON数据;二是提供了具体的代码实现,包括获取天气数据的`get_weather_data`函数和解析数据的`parse_weather_data`函数;三是对代码逻辑进行了详细说明,包括如何通过API获取数据以及如何解析这些数据来获取温度和天气描述等信息。用户需要根据实际使用的天气API调整代码中的API地址、参数和字段名称。
|
7天前
|
存储 网络协议 物联网
网络中的“客户端”和“服务器
【8月更文挑战第24天】
18 0
|
10天前
|
缓存 监控 中间件
构建高效的Go语言Web服务器:基于Fiber框架的性能优化实践
在追求极致性能的Web开发领域,Go语言(Golang)凭借其高效的并发处理能力、垃圾回收机制及简洁的语法赢得了广泛的青睐。本文不同于传统的性能优化教程,将深入剖析如何在Go语言环境下,利用Fiber这一高性能Web框架,通过精细化配置、并发策略调整及代码层面的微优化,构建出既快速又稳定的Web服务器。通过实际案例与性能测试数据对比,揭示一系列非直觉但极为有效的优化技巧,助力开发者在快节奏的互联网环境中抢占先机。
|
16天前
|
机器学习/深度学习 编解码 人工智能
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
随着人工智能、大数据和深度学习等领域的快速发展,GPU服务器的需求日益增长。阿里云的GPU服务器凭借强大的计算能力和灵活的资源配置,成为众多用户的首选。很多用户比较关心gpu云服务器的收费标准与活动价格情况,目前计算型gn6v实例云服务器一周价格为2138.27元/1周起,月付价格为3830.00元/1个月起;计算型gn7i实例云服务器一周价格为1793.30元/1周起,月付价格为3213.99元/1个月起;计算型 gn6i实例云服务器一周价格为942.11元/1周起,月付价格为1694.00元/1个月起。本文为大家整理汇总了gpu云服务器的最新收费标准与活动价格情况,以供参考。
阿里云gpu云服务器租用价格:最新收费标准与活动价格及热门实例解析
|
6天前
|
弹性计算 负载均衡 数据库
阿里云轻量应用服务器全面解析:收费标准、产品优势及适用场景
在云计算领域,阿里云凭借其强大的技术实力和丰富的产品线,为用户提供了一系列高效、便捷的云服务器产品。其中,轻量应用服务器(Simple Application Server)作为面向个人开发者、中小企业等用户的入门级云产品,凭借其易用性、高性价比以及一站式服务体验,受到了广泛的欢迎。本文将全面解析阿里云轻量应用服务器的收费标准、产品优势以及适用场景,帮助用户更好地了解和选择这一产品。
阿里云轻量应用服务器全面解析:收费标准、产品优势及适用场景
下一篇
云函数