Apache Thrift(服务开发框架)
v0.14.1 官方版- 软件大小:6.17 MB
- 更新日期:2021-03-18 10:44
- 软件语言:英文
- 软件类别:编程工具
- 软件授权:免费版
- 软件官网:待审核
- 适用平台:WinXP, Win7, Win8, Win10, 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
处理器
处理器封装了从输入流读取数据并写入输出流的功能。输入和输出流由协议对象表示。处理器界面非常简单
特定于服务的处理器实现由编译器生成。处理器本质上是从线路读取数据(使用输入协议),将处理委托给处理程序(由用户实现),并通过线路写入响应(使用输出协议)。
服务器
服务器将上述所有各种功能汇总在一起:
创建运输
创建用于传输的输入/输出协议
根据输入/输出协议创建处理器
等待传入的连接并将其交给处理器
人气软件
-
redis desktop manager2020.1中文 32.52 MB
/简体中文 -
s7 200 smart编程软件 187 MB
/简体中文 -
GX Works 2(三菱PLC编程软件) 487 MB
/简体中文 -
CIMCO Edit V8中文 248 MB
/简体中文 -
JetBrains DataGrip 353 MB
/英文 -
Dev C++下载 (TDM-GCC) 83.52 MB
/简体中文 -
TouchWin编辑工具(信捷触摸屏编程软件) 55.69 MB
/简体中文 -
信捷PLC编程工具软件 14.4 MB
/简体中文 -
TLauncher(Minecraft游戏启动器) 16.95 MB
/英文 -
Ardublock中文版(Arduino图形化编程软件) 2.65 MB
/简体中文