apache/thrift
GitHub: apache/thrift
Apache Thrift 是一个轻量级、语言无关的跨语言 RPC 框架,通过接口定义和代码生成实现异构系统间高效的远程过程调用与数据共享。
Stars: 10941 | Forks: 4113
# Apache Thrift
# 简介
Thrift 是一个轻量级、独立于语言的软件栈,用于实现点对点 RPC。
Thrift 为数据传输、数据序列化和应用级处理提供了清晰的抽象和实现。代码生成系统以简单的定义语言作为输入,并生成跨编程语言的代码,这些代码使用抽象的栈来构建可互操作的 RPC 客户端和服务器。

Thrift 让使用不同编程语言编写的程序可以轻松地共享数据和调用远程过程。由于支持 [28 种编程语言](LANGUAGES.md),Thrift 很可能支持你当前正在使用的语言。
Thrift 经过专门设计,支持客户端和服务器代码之间的非原子版本更改。这允许你在升级服务器的同时,仍然能够为旧客户端提供服务;或者让新客户端向旧服务器发送请求。[Thrift 缺失的指南](https://diwakergupta.github.io/thrift-missing-guide/#_versioning_compatibility) 中提供了一份关于 API 版本控制时 thrift 和兼容性的优秀社区文章。
有关 Thrift 设计和实现的更多细节,请参阅本发行版中包含的 Thrift 白皮书,或者阅读你感兴趣的特定子目录中的 README.md 文件。
# 状态
| 分支 | Travis | Appveyor | Coverity Scan | codecov.io | 网站 |
| :----- | :----- | :------- | :------------ | :--------- | :------ |
| [`master`](https://github.com/apache/thrift/tree/master) | [](https://app.travis-ci.com/apache/thrift/branches) | [](https://ci.appveyor.com/project/ApacheSoftwareFoundation/thrift/history) | [](https://scan.coverity.com/projects/thrift) | | [](https://thrift.apache.org/) |
| [`0.23.0`](https://github.com/apache/thrift/tree/0.23.0) | [](https://app.travis-ci.com/apache/thrift/branches) | | | | |
# 发布
Thrift 目前没有固定的发布时间表。我们努力做到每年发布两次。下载[当前版本](http://thrift.apache.org/download)。
# 许可证
根据一项或多项贡献者许可协议授权给 Apache Software Foundation (ASF)。请参阅随本工作分发的 NOTICE 文件,以获取有关版权所有权的更多信息。ASF 根据 Apache License 2.0 版(即“许可证”)向你授权本文件;除非遵守许可证,否则你不得使用本文件。你可以在以下地址获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据许可证分发的软件均按“原样”分发,不附带任何明示或暗示的担保或条件。请参阅许可证以了解管辖权限和限制的具体语言。
# 项目层级
thrift/
compiler/
```
Contains the Thrift compiler, implemented in C++.
```
lib/
```
Contains the Thrift software library implementation, subdivided by
language of implementation.
cpp/
go/
java/
php/
py/
rb/
...
```
test/
```
Contains sample Thrift files and test code across the target programming
languages.
```
tutorial/
```
Contains a basic tutorial that will teach you how to develop software
using Thrift.
```
# 开发
要像 Travis CI 那样构建项目,你应该使用 docker。我们提供了[详尽的 docker 构建说明](build/docker/README.md)。
# 依赖要求
请参阅 http://thrift.apache.org/docs/install 获取构建要求的列表(可能已过时)。或者,查看 docker 构建环境以获取先决条件列表。
# 资源
可以在 Thrift 网页上获取有关 Thrift 的更多信息:
```
http://thrift.apache.org
```
# 致谢
Thrift 的灵感来源于 pillar(由 Adam D'Angelo 编写的轻量级 RPC 工具),同时也受到了 Google 的 protocol buffers 的启发。
# 安装
如果你是第一次从源代码库构建,你需要生成 configure 脚本。(如果你下载的是 tarball,则不需要此步骤。)在顶级目录中,执行:
```
./bootstrap.sh
```
生成 configure 脚本后,就可以配置 thrift 了。在顶级目录中,执行:
```
./configure
```
你可能需要显式指定 boost 文件的位置。如果你将 boost 安装在 `/usr/local` 中,你应该按如下方式运行 configure:
```
./configure --with-boost=/usr/local
```
请注意,默认情况下,thrift C++ 库在构建时通常包含调试符号。如果你想自定义这些选项,你应该在 configure 中使用 CXXFLAGS 选项,如下所示:
```
./configure CXXFLAGS='-g -O2'
./configure CFLAGS='-g -O2'
./configure CPPFLAGS='-DDEBUG_MY_FEATURE'
```
要启用 gcov 所需的选项 -fprofile-arcs -ftest-coverage,请执行以下命令启用它们:
```
./configure --enable-coverage
```
运行 ./configure --help 查看其他配置选项。
请注意,Python 库会忽略 --prefix 选项,并直接安装到 Python 的 distutils 指定的位置(通常类似于 `/usr/lib/pythonX.Y/site-packages/`)。如果你需要控制 Python 模块的安装位置,请设置 PY_PREFIX 变量。(Python 和 C++ 遵循 DESTDIR 设置。)
构建 thrift:
```
make
```
在顶级目录中,成为超级用户并执行:
```
make install
```
卸载 thrift:
```
make uninstall
```
请注意,某些语言包必须使用更适合这些语言的构建工具手动安装(在撰写本文时,这适用于 Java、Ruby、PHP)。
请查看 lib/<语言>/ 文件夹中的 README.md 文件,以获取有关安装每种语言库包的更多详细信息。
# 包管理器
Apache Thrift 可以通过许多包管理器获取,而且这个列表还在不断增加。更详细的概述可以在 [Apache Thrift 网站的“库”部分](http://thrift.apache.org/lib/)和 /lib 下每种语言各自的 README 中找到。
# 测试
有大量的客户端库测试可以从顶级目录运行。
```
make -k check
```
这将构建所有的库(如有必要),并运行每个客户端库中定义的单元测试。如果单一语言失败,make check 将继续运行,并在最后提供摘要。
要运行跨语言测试套件,请运行:
```
make cross
```
这将运行一系列使用不同语言客户端和服务器的测试。
标签:JS文件枚举, 日志审计, 请求拦截, 逆向工具