精品软件 400多个 139my辅 3DESIGN 567网盘

Apache Thrift(服务开发框架) v0.14.1 官方版

Apache Thrift(服务开发框架)
软件大小: 6.17 MB 更新时间: 2021-04-25 应用平台: WinAll 软件分类: 其他类别

Apache Thrift(服务开发框架)提供跨语言服务开发功能,用户可以在软件上使用多种语言开发你的服务项目,结合编辑器就可以输入代码内容,让用户可以设计各种编程语言支持的客户端程序和服务端程序,有需要的用户快来统一下载体验吧。

软件提供很多数据类型,提供很多接口类型,满足大部分程序接入需求,结合服务器功能就可以执行数据传输,根据输入/输出协议创建处理器,特定于服务的处理器实现由编译器生成,为用户提供更方便的服务项目编译方案;Apache Thrift支持的语言还是很多的,C ++,Java,Python等常用的语言都支持,为可扩展的跨语言服务开发提供更多选择!

软件功能

      Apache Thrift功能:

      界面描述语言-一切都在IDL文件中指定,可以从该文件生成多种语言的绑定。

      语言绑定-许多语言和环境都支持Thrift

      C++

      C#

      Cocoa

      D

      Delphi

      Erlang

      Haskell

      Java

      OCaml

      Perl

      PHP

      Python

      Ruby

      Smalltalk

      ~名称空间-每个Thrift文件位于其自己的名称空间中,允许您在多个Thrift文件中使用相同的标识符

      语言名称空间-每个Thrift文件,您可以指定每种编程语言应使用的名称空间

      基本类型-Thrift有少量的基本类型。

      常量和枚举-可以为常量值分配逻辑名称

      结构-使用结构对相关数据进行分组。结构可以具有任何类型的字段。

      稀疏结构-尚未设置的可选基本字段和为空的参考字段将不会通过电线发送

      结构演化-通过使用字段的整数标识符来处理字段的添加和删除,而不会破坏现有的客户端

      容器-您可以使用任何类型的集,列表和映射:基本类型,结构和其他容器。

      类型定义-可以给任何类型一个更好地描述它的名称

      服务-服务是一组功能

      服务继承-子服务实现其基本服务的所有功能,并且可以具有其他功能

      异步调用-可以异步调用不返回结果的函数,因此在服务器完成对请求的处理之前,不会阻塞客户端。服务器可以并行/无序执行同一客户端的异步调用

      异常-如果发生错误,则函数可以引发标准或用户定义的异常

      循环结构-从0.9.2版开始,Thrift支持包含自身的结构或以后要声明的其他结构。

      非功能

      Apache Thrift不支持以下功能:

      struct继承-改用struct组合

      多态-由于没有继承,因此也不支持多态

      重载-服务中的所有方法都必须唯一地命名

      异构容器-容器中的所有物品都必须是同一类型

      空返回-无法直接从函数返回空。使用包装器结构或标记值代替

软件特色

      Apache Thrift是一个软件项目,涉及多种编程语言和用例。我们的目标是使跨语言的可靠,高性能的通信和数据序列化尽可能高效和无缝。Thrift最初由Facebook开发,于2007年4月开源,并于2008年5月进入Apache孵化器。Thrift于2010年10月成为Apache TLP。

      Apache Thrift旨在体现以下价值观:

      简单性 Thrift代码简单易用,没有不必要的依赖关系。

      透明 节俭符合所有语言中最常见的习惯用法。

      一致性 生态位,特定于语言的功能属于扩展,而不是核心库。

      性能 力争性能第一,优雅第二。

软件优势

      1、节俭的类型

      Thrift类型系统旨在使程序员无论使用哪种编程语言,都可以尽可能多地使用本机类型。此信息基于并且取代了Thrift白皮书中的信息。的节俭IDL提供了用于产生针对每个目标语言代码的类型的描述。

      2、基本类型

      选择基本类型的目的是简化和清楚而不是数量众多,重点放在所有编程语言中可用的键类型上。

      bool:布尔值(对或错)

      字节:8位有符号整数

      i16:16位有符号整数

      i32:32位有符号整数

      i64:64位有符号整数

      double:64位浮点数

      字符串:使用UTF-8编码编码的文本字符串

      3、结构

      节俭结构定义了一个公共对象–它们本质上等同于OOP语言中的类,但没有继承。一个结构具有一组强类型字段,每个字段都有一个唯一的名称标识符。字段可能具有Thrift IDL中描述的各种注释(数字字段ID,可选的默认值等) 。

      4、容器

      节俭容器是强类型的容器,它们映射到大多数编程语言中的常用容器和常用容器类型。

      共有三种容器类型:

      列表:元素的有序列表。转换为STL向量,Java ArrayList,脚本语言的本机数组等。

      放:无序的唯一元素集。转换为STL集,Java HashSet,Python中的集等。注意:PHP不支持集,因此与List相似。

      map :严格唯一的键到值的映射。转换为STL映射,Java HashMap,PHP关联数组,Python / Ruby字典等。尽管提供了默认值,但类型映射未明确固定。添加了自定义代码生成器指令,以允许以各种目标语言替换自定义类型。

使用说明

      例子

      Apache Thrift允许您在简单的定义文件中定义数据类型和服务接口。将该文件作为输入,编译器将生成用于轻松构建跨编程语言无缝通信的RPC客户端和服务器的代码。您可以直接开始工作,而无需编写大量的样板代码来序列化和传输对象并调用远程方法。

      以下示例是一个简单的服务,用于存储Web前端的用户对象。

      节俭定义文件

      Python客户端

      Java服务器

      初始化服务器

      节俭的接口描述语言

      对于Thrift版本0.15.0。

      Thrift接口定义语言(IDL)允许Thrift Types的定义。Thrift代码生成器处理Thrift IDL文件以生成用于各种目标语言的代码,以支持IDL文件中定义的结构和服务。

      描述

      这是Thrift IDL的描述。

      文件

      每个Thrift文档包含0个或多个标头,后跟0个或多个定义。

      标头

      标头可以是Thrift包含,C ++包含或名称空间声明。

      节俭包含

      包含使来自另一个文件的所有符号可见(带有前缀),并将相应的包含语句添加到为此Thrift文档生成的代码中。

      C ++包含

      C ++包含将自定义C ++包含添加到此Thrift文档的C ++代码生成器的输出中

      命名空间

      名称空间声明了哪个名称空间/程序包/模块/等。该文件中的类型定义将以目标语言声明。名称空间范围指示名称空间适用的语言。范围“ *”表示名称空间适用于所有目标语言

      定义

      常量

      typedef

      typedef为类型创建备用名称

      枚举

      一个枚举创建一个带有命名值的枚举类型。如果没有提供常量值,则第一个元素的值为0,或者对于任何后续元素的值都大于先前的值。提供的任何常量值都必须为非负数。

      Senum

      Senum(和Slist)现在已弃用,均应替换为String。

      结构

      结构是Thrift中的基本组成类型。每个字段的名称在结构中必须唯一。

      注意:该xsd_all关键字在Facebook内部具有某些用途,但在Thrift本身中没有任何用途。强烈建议不要使用此功能

      联盟

      联合与结构相似,不同之处在于,联合提供了一种传输可能的一组字段中的一个字段的方法,就像C ++中的union {}一样。因此,工会成员被隐含地视为可选的(请参阅要求)。

      注意:该xsd_all关键字在Facebook内部具有某些用途,但在Thrift本身中没有任何用途。强烈建议不要使用此功能

      异常

      异常与结构相似,不同之处在于它们旨在与目标语言中的本机异常处理机制集成。在异常中,每个字段的名称必须唯一。

      需求的一般规则如下:

      必填

      写入:必填字段始终会被写入,并且需要设置。

      读取:必填字段始终被读取,并且预期包含在输入流中。

      默认值:始终写入

      如果在读取过程中缺少必填字段,则预期的行为是向调用方指示未成功的读取操作,例如,引发异常或返回错误。

      由于这种行为,必填字段极大地限制了有关软版本控制的选项。因为必须在读取时显示它们,所以不能弃用这些字段。如果必填字段将被删除(或更改为可选字段),则各版本之间的数据将不再兼容。

      可选

      写入:仅在设置了可选字段后才写入它们

      读取:可选字段可能会或可能不会成为输入流的一部分。

      默认值:在设置了isset标志时写入

      大多数语言实现都使用推荐的所谓“ isset”标志的做法来指示是否设置了特定的可选字段。仅写入设置了此标志的字段,相反,仅当从输入流中读取了字段值时,才设置该标志。

      默认要求(隐式)

      写:理论上,字段总是写的。该规则有一些例外,请参见下文。

      读取:与可选字段一样,该字段可以或可以不属于输入流。

      默认值:可能无法写入(请参阅下一节)

      默认要求是一个很好的起点。所需的行为是可选的和必需的,因此内部名称为“选择加入,要求退出”。尽管从理论上讲这些字段应该被写入(“ req-out”),但实际上未设置的字段并不总是被写入。当字段包含一个价值,顾名思义是不能通过节俭运输的。实现此目的的唯一方法是根本不编写该字段,而这正是大多数语言所做的。

      默认值的语义

      有关该主题的讨论正在进行中,有关详细信息,请参见JIRA。并非所有实现都以完全相同的方式对待默认值,但是当前状态或多或少地是通常在初始化时设置默认字段。因此,可能无法写入等于默认值的值,因为读取端将隐式设置该值。另一方面,无论如何,实现都可以自由写入默认值,因为没有严格的限制可以防止这种情况发生。

      这里要记住的主要事实是,任何未写入的默认值都隐式地成为接口版本的一部分。如果更改了默认设置,则界面也会更改。相反,如果将默认值写入输出数据,则IDL中的默认值可以随时更改而不会影响序列化数据。

      节俭的网络堆栈

      Apache Thrift网络堆栈的简单表示

      运输

      传输层为从网络读取/向网络写入提供了简单的抽象。这使Thrift可以将基础传输与系统的其余部分解耦(例如,序列化/反序列化)。

      以下是传输接口公开的一些方法:

      打开

      关闭

      读

      写

      齐平

      除了上面的传输接口之外,Thrift还使用ServerTransport接口来接受或创建原始传输对象。顾名思义,ServerTransport主要用于服务器端,为传入的连接创建新的传输对象。

      打开

      听

      接受

      关闭

      以下是大多数Thrift支持的语言可用的传输方式:

      文件:对磁盘上的文件进行读/写操作

      http:顾名思义

      协议

      协议抽象定义了一种将内存中的数据结构映射为有线格式的机制。换句话说,协议指定数据类型如何使用基础传输来对其自身进行编码/解码。因此,协议实现控制编码方案,并负责(反序列化)。从这个意义上来说,协议的一些示例包括JSON,XML,纯文本,紧凑二进制等。

      这是协议接口:

      节俭协议通过设计面向流。不需要任何明确的框架。例如,在开始序列化字符串之前,不必知道字符串的长度或列表中的项目数。大多数受Thrift支持的语言可用的一些协议是:

      二进制:非常简单的二进制编码–字段的长度和类型被编码为字节,然后是字段的实际值。

      紧凑:描述于THRIFT-110

      json

      处理器

      处理器封装了从输入流读取数据并写入输出流的功能。输入和输出流由协议对象表示。处理器界面非常简单

      特定于服务的处理器实现由编译器生成。处理器本质上是从线路读取数据(使用输入协议),将处理委托给处理程序(由用户实现),并通过线路写入响应(使用输出协议)。

      服务器

      服务器将上述所有各种功能汇总在一起:

      创建运输

      创建用于传输的输入/输出协议

      根据输入/输出协议创建处理器

      等待传入的连接并将其交给处理器