Thrift

✍ dations ◷ 2025-11-09 10:18:09 #自2013年8月需要澄清文字的条目,应用层协议,数据序列化格式,进程间通信,远端程序呼叫,Facebook软件

Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码生成引擎联合了一个软件栈,来创建不同程度的、无缝的跨平台高效服务,可以使用C#、C++(基于POSIX兼容系统)、Cappuccino、Cocoa、Delphi、Erlang、Go、Haskell、Java、Node.js、OCaml、Perl、PHP、Python、Ruby和Smalltalk。虽然它以前是由Facebook开发的,但它现在是Apache软件基金会的开源项目了。该实现被描述在2007年4月的一篇由Facebook发表的技术论文中,该论文现由Apache掌管。

Thrift包含一套完整的栈来创建客户端和服务端程序。顶层部分是由Thrift定义生成的代码。而服务则由这个文件客户端和处理器代码生成。在生成的代码里会创建不同于内建类型的数据结构,并将其作为结果发送。协议和传输层是运行时库的一部分。有了Thrift,就可以定义一个服务或改变通讯和传输协议,而无需重新编译代码。除了客户端部分之外,Thrift还包括服务器基础设施来集成协议和传输,如阻塞、非阻塞及多线程服务器。栈中作为I/O基础的部分对于不同的语言则有不同的实现。

Thrift支持众多通讯协议:

支持的有:

Thrift还提供众多的服务器,包括:

Thrift一些已经明确的优点包括:

Thrift由C++编写,但可以为众多语言创建代码。要创建一个Thrift服务,必须写一些Thrift文件来描述它,为目标语言生成代码,并且写一些代码来启动服务器及从客户端调用它。下面就是一个这样的描述文件的代码示例:

enum PhoneType { HOME, WORK, MOBILE, OTHER}struct Phone { 1: i32 id, 2: string number, 3: PhoneType type}

Thrift将由这个描述信息生成独立的代码。例如,在Java里,PhoneType将是Phone类中一个简单的enum

相关

  • 内生孢子内生孢子(英语:endospore,又称芽孢或内孢子)是某些特殊种群的细菌,主要是芽孢杆菌属Bacillus与梭菌属Clostridium中细菌产生的特殊休眠体,这些细菌会在缺乏养分的环境时开始进入此
  • 托马斯·潘恩托马斯·潘恩(Thomas Paine;1737年2月9日-1809年6月8日),英裔美国思想家、作家、政治活动家、理论家、革命家、激进民主主义者。生于英国诺福克郡,曾继承父业做过裁缝,后来做过教师
  • 迈尔霍夫奥托·弗利兹·迈尔霍夫(Otto Fritz Meyerhof,1884年4月12日-1951年10月6日)是一位德国医师与生物化学家。迈尔霍夫生于汉诺威的一个犹太家庭,大学就读斯特拉斯堡大学与海德堡大
  • 势力范围势力范围是用以描述某一国家对某地区有的控制及影响力的词汇,例如:美国提出门户开放政策使各国都有机会在中国确立势力范围。当一个国家或地区沦为另一强权的势力范围时,通常即
  • 卡兹奇山卡兹奇山、或译卡茨基尔山(Catskills Mountains或the Catskills)是美国纽约州哈德逊河以西、奥本尼西南方的一处高原,是阿利根尼高原的最东部。东部陡峭,向西渐见平缓。最高点斯
  • 萨蒙·蔡斯萨蒙·波特兰·蔡斯(Salmon Portland Chase,1808年1月13日 - 1873年5月7日),是美国政治家和法学家,曾任美国参议院议员(1849年-1855年)、第23任俄亥俄州州长(1856年-1860年)、第25任
  • 二叠纪二叠纪(英语:Permian,符号P)是古生代的最后一个地质时代,时间处于石炭纪、三叠纪之间(2.99-2.51亿年前)。定义二叠纪的岩石层是比较分明的,但开始、结束的精确年代却有争议。其不精
  • 䥑的同位素䥑(钅麦)的同位素备注:画上#号的数据代表没有经过实验的证明,只是理论推测而已,而用括号括起来的代表数据不确定性。
  • 各国GDP实际增长率列表本文包括按实际GDP经济增长率排序的国家和属地列表。2017年数据。
  • 阿尔克伊1法国统计部门在计算土地面积时,不计算面积大于1平方公里的湖泊、池塘、冰川和河口。阿尔克伊(法语:Arcueil)是法国法兰西岛大区马恩河谷省的一个市镇,属于拉伊莱罗斯区。该市镇2