分类分类
大小:6.17 MB 更新:2021/03/18
类别:编程工具系统: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
处理器
处理器封装了从输入流读取数据并写入输出流的功能。输入和输出流由协议对象表示。处理器界面非常简单
特定于服务的处理器实现由编译器生成。处理器本质上是从线路读取数据(使用输入协议),将处理委托给处理程序(由用户实现),并通过线路写入响应(使用输出协议)。
服务器
服务器将上述所有各种功能汇总在一起:
创建运输
创建用于传输的输入/输出协议
根据输入/输出协议创建处理器
等待传入的连接并将其交给处理器
Embarcadero RAD Studio(多功能应用程序开发工具) 编程工具177.22 MB12
详情猿编程客户端 编程工具173.32 MB4.16.0
详情猿编程 编程工具173.32 MB4.16.0
详情VSCodium(VScode二进制版本) 编程工具76.23 MBv1.57.1
详情aardio(桌面软件快速开发) 编程工具9.72 MBv35.69.2
详情一鹤快手(AAuto Studio) 编程工具9.72 MBv35.69.2
详情ILSpy(.Net反编译) 编程工具3.97 MBv8.0.0.7339 绿色
详情文本编辑器 Notepad++ 编程工具7.81 MBv8.1.3 官方中文版
详情核桃编程 编程工具272.43 MBv2.1.120.0 官方版
详情delphi2007完整 编程工具1198 MB附安装教程
详情SAPIEN PrimalScript2015 编程工具78.02 MB附带安装教程
详情Alchemy Catalyst可视化汉化工具 编程工具81.00 MBv13.1.240
详情Professional Tag Editor(通用标签编辑器) 编程工具25.6 MBv1.0.6.8
详情Coffeecup HTML Editor(html网页编辑器) 编程工具68.98 MBv15.4 特别版
详情JCreator Pro 编程工具9.65 MBv5.0.1 汉化
详情WebStorm 12中文 编程工具209.88 MB附带安装教程
详情MSWLogo(多功能项目开发与管理工具) 编程工具2.25 MBv6.5 免费版
详情JetBrains datagrip 2018.2.1中文-datagrip 2018.2.1 编程工具160.88 MB附注册码汉化包
详情易安卓5.0 编程工具202 MBv5.0 附破解补丁
详情keil uvision5 编程工具271.63 MB附带安装教程
详情CIMCO Edit V8中文 编程工具248 MB附安装教程
详情IntelliJ IDEA 2020.1(java集成开发环境) 编程工具643.0 MB附安装教程
详情redis desktop manager2020.1中文 编程工具32.52 MB附带安装教程
详情猿编程 编程工具173.32 MB4.16.0
详情信捷PLC编程工具软件 编程工具14.4 MBv3.5.2 官方版
详情源码编辑器 编程工具201.0 MBv3.4.3 官方版
详情Microsoft Visual C++ 编程工具226.00 MBv6.0 SP6 简体中文版
详情s7 200 smart编程软件 编程工具187 MBv2.2 官方中文版
详情TouchWin编辑工具(信捷触摸屏编程软件) 编程工具55.69 MBv2.D2c 官方版
详情易语言5.8完美 编程工具312 MB5.8.1 破解增强版
详情Scraino(少儿编程软件) 编程工具272.93 MBv0.3.0 官方版
详情vs2008中文 编程工具1495 MB附序列号
详情e盾网络验证源码 编程工具25.77 MBV45 官方版
详情codeblocks 编程工具95.21 MBv13.12 中文完整版(带GNW编译器
详情Android Studio(安卓开发环境) 编程工具983.0 MBv3.5.0.21 汉化版(附安装教程)
详情源码编辑器pc版 编程工具201.0 MBv3.4.3 官方版
详情CH341A编程器 编程工具1.06 MB1.30 绿色中文版
详情layuiAdmin pro(layui后台管理模板系统) 编程工具0.57 MBv1.1.0 单页版
详情海龟编辑器 编程工具71.5 MBv0.8.4 中文版
详情Ardublock中文版(Arduino图形化编程软件) 编程工具2.65 MB附带安装教程
详情文本编辑器 Notepad++ 编程工具7.81 MBv8.1.3 官方中文版
详情富途牛牛 编程工具160.59 MBv11.8.9068 官方版
详情微信开发者工具 编程工具129.37 MBv1.05.2105170 官方版
详情UEStudio v18.0.0.18 简体中文绿色 编程工具19.00 MB
详情十六进制编辑器 WinHex 编程工具2.79 MBv20.2 SR-5
详情代码编辑器 Sublime Text 编程工具54.74 MBv4.0.0.4126
详情RJ TextEd(代码编辑器) 编程工具49.46 MBv15.31
详情核桃编程 编程工具272.43 MBv2.1.120.0 官方版
详情影刀 编程工具306.37 MBv4.9.14
详情Kate(高级文本编辑器) 编程工具56.11 MBv21.12.1.1544
详情