Thrift

✍ dations ◷ 2025-09-14 16:08:55 #自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

相关

  • 罗思曼詹姆斯·E·罗思曼(英语:James E. Rothman,1950年11月3日-),美国生物学家和医学家,耶鲁大学细胞生物学系系主任、Fergus F. Wallace名誉生物医学教授。他曾获得多种荣誉,包括哥伦比
  • 皮尔罗伯特·皮尔爵士,第二代从男爵(英语:Sir Robert Peel, 2nd Baronet,1788年2月5日-1850年7月2日),出生于英国布莱克本附近,政治家,他被看作是英国保守党的创建人,及伦敦警察厅的成立者
  • 华盛顿华盛顿(Washington)通常是指:华盛顿还可以指:
  • 主要颜色此列表仅列出常见的色彩,色彩的多样性使得在实际上难以全部列举或命名。另外由于各种显示器在未经校正前有色差存在,因此以下的色彩呈现仅供参考。本列表依三原色光模式、印刷
  • 维也纳之战神圣同盟: 波兰立陶宛联邦  神圣罗马帝国匈牙利王国奥斯曼帝国 帝国附属国:维也纳之战(德语:Schlacht am Kahlenberg、波兰语:Bitwa pod Wiedniem或Odsiecz Wiedeńska、土耳
  • 徐日昇徐日升(1645年11月1日-1708年12月25日),原名托马斯·佩雷拉(葡萄牙语:Tomás Pereira;英语:Thomas Pereira),字寅公,葡萄牙人,清康熙朝来华天主教耶稣会传教士。康熙十一年(1672年)先抵
  • 中国海军博物馆海军博物馆,位于中国山东省青岛市市南区莱阳路8号。临近鲁迅公园、小青岛公园,与青岛栈桥隔海相望。中国海军博物馆是中国第一座反映中国人民解放军海军发展的专业性军事博物
  • 卢卡斯数卢卡斯数是一个以数学家爱德华·卢卡斯命名的整数序列,他既研究了这个数列,也研究了有密切关系的斐波那契数。与斐波那契数一样,每一个卢卡斯数都定义为前两项之和,也就是说,它是
  • 非洲森林象非洲森林象(学名:)又名圆耳象,主要分布于非洲刚果盆地一带。从前,非洲森林象被视为普通非洲象(学名:)的亚种,但透过基因分析之后,被认为可能是一支独立物种。然而,自然保护联盟(IUCN)的非
  • 相生町 (板桥区)相生町(日语:相生町/あいおいちょう  */?)是东京都板桥区的町名,为不设丁目的单独町名。板桥区全域已实施住居表示(日语:住居表示)。位于板桥区地理中央地区。北邻莲根,东北连坂下,