⑴Thrift是一款功能强大简单易用的远程过程调用框架以及服务开发框架,专门用于可扩展且跨语言的服务的开发,通过该框架用户可以对文件中的数据类型和服务接口进行简单便捷的编辑和自定义,以便于后续对文件的输出,同时通过该框架的编译器生成代码可以和用来生成RPC客户端和服务器通信的编程语言无缝连接;Thrift结合了功能强大的软件堆栈和代码生成引擎,可在C++JavaPythonPHP等多种编程语言间进行专业的无缝结合,为用户提供专业便捷稳定高效的服务,可以说是一个非常好用的跨语言服务开发必备框架。
⑵struct继承-改用struct组合
⑶多态-由于没有继承,因此也不支持多态
⑷重载-服务中的所有方法都必须唯一地命名
⑸异构容器-容器中的所有物品都必须是同一类型
⑹空返回-无法直接从函数返回空。使用包装器结构或标记值代替
⑺Thrift编译器用于将Thrift文件生成为源代码,供不同的客户端库和所编写的服务器使用
⑻名称空间-每个Thrift文件位于其自己的名称空间中,允许您在多个Thrift文件中使用相同的标识符
⑼语言名称空间-每个Thrift文件,您可以指定每种编程语言应使用的名称空间
⑽基本类型-Thrift有少量的基本类型。查看节俭类型
⑾常量和枚举-可以为常量值分配逻辑名称
⑿结构-使用结构对相关数据进行分组。结构可以具有任何类型的字段。查看节俭类型
⒀稀疏结构-尚未设置的可选基本字段和为空的参考字段将不会通过电线发送
⒁结构演化-通过使用字段的整数标识符来处理字段的添加和删除,而不会破坏现有的客户端
⒂容器-您可以使用任何类型的集,列表和映射:基本类型,结构和其他容器。查看节俭类型
⒃类型定义-可以给任何类型一个更好地描述它的名称
⒄服务继承-子服务实现其基本服务的所有功能,并且可以具有其他功能
⒅异步调用-可以异步调用不返回结果的函数,因此在服务器完成对请求的处理之前,不会阻塞客户端。服务器可以并行/无序执行同一客户端的异步调用
⒆首先确保您的系统符合所有必要的Apache Thrift要求
⒇如果您是从源存储库中首次构建的,则需要生成configure脚本。(如果您下载了已发布的tarball,则不需要这样做。从顶层目录中执行以下操作:
⒈一旦生成了配置脚本,就可以配置节俭。在顶层目录中,执行以下操作:
⒉ --without-java
⒊您可能需要明确指定增强文件的位置。如果在/ usr / local中安装了boost,则可以按以下方式运行configure:
⒋ --with-boost=/usr/local
⒌如果要覆盖Java SDK的检测逻辑,请使用JAVAC环境变量:
⒍ JAVAC=/usb/bin/javac
⒎请注意,默认情况下,节俭的C ++库通常使用调试符号来构建。如果要自定义这些选项,则应在configure中使用CXXFLAGS选项,例如:
⒏ CXXFLAGS='-g -O'
⒐ CFLAGS='-g -O'
⒑ CPPFLAGS='-DDEBUG_MY_FEATURE'
⒒要查看其他配置选项,请运行
⒓运行configure之后,您可以通过make构建Thrift:
⒔并运行测试套件:
⒕make check
⒖和跨语言测试套件:
⒗sh test/test.sh
⒘“ piler / cpp / thriftl.::对'yywrap'的未定义引用”
⒙您需要安装Flex库(另请参阅Apache Thrift要求并重新运行配置脚本。
⒚mv:在构建Thrift运行时库时,无法状态“'.deps / TBinaryProtocol.Tpo':无此类文件或目录”
⒛--enable-libtool-lock
①或通过将.NOTPARALLEL:放置在lib / cpp / Makefile或
②make -j
③尽管节俭的编译器构建似乎与没有libtool锁的并行make兼容,但节俭的运行时构建却不兼容。
④在顶层目录中,成为超级用户并执行以下操作:
⑤make install
⑥请注意,必须使用更适合那些语言的构建工具来手动安装某些语言包(这适用于Java,Ruby,PHP。
⑦在lib//文件夹中查找README文件,以获取有关每个语言库软件包安装的更多详细信息。
⑧GitHub拉取请求
⑨这是提交更改的首选方法。当您通过github提交拉取请求时,它会激活Appveyor和Travis的持续集成(CI构建系统,以在各种Linux和Windows配置上构建您的changexi,并运行所有测试套件。请遵循以下要求,以成功完成拉取请求:
⑩所有重大更改都需要Apache Jira THRIFT发行票证。诸如拼写错误或编译器警告之类的琐碎更改不会。
Ⅰ每个请求的所有拉取请求都应包含一个提交,否则我们将要求您压缩它。
Ⅱ如果拉取请求标题具有关联的票证,则必须以Jira THRIFT票证标识符开头,例如:
ⅢTHRIFT-: an example pull request title
Ⅳ提交消息必须遵循以下模式进行代码更改(偏差不会合并:
ⅤTHRIFT-: [summary of fix, one line if possible]
ⅥClient: [language(s) affected, ma separated, for example:
Ⅶ"cpp,erl,perl"]
Ⅷ在您的GitHub帐户中创建一个fork
Ⅸ将分支克隆到您的开发系统。
Ⅹ为您的更改创建一个分支(最佳实践是作为分支名称发出,例如THRIFT-。
㈠修改源以包括改进/错误修正,并:
㈡请记住要为所有提交的更改提供测试!
㈢使用测试驱动的开发(TDD:添加一个测试,以隔离该错误,然后应用修正该错误的更改。
㈣确认您遵守节俭编码标准(可以运行“ make style”,以确保某些语言的格式正确。
㈤[可选]通过向Travis
㈥CI和AppVeyor添加GitHub服务钩子,验证您的更改是否可在其他平台上使用。您可以使用此技术在帐户中运行Thrift
㈦CI作业以检查更改,然后再将其公开。每个到Thrift的GitHub拉取请求都将对您的更改运行完整的CI构建和测试套件。
㈧将更改压入一次提交。这样可以保持干净的更改历史记录。
㈨提交并推送对分支的更改(请使用发布名称和描述作为提交标题,例如“ THRIFT-:使其完美”,并在描述的下一行使用受影响的语言。
㈩使用GitHub创建从分支到apache:master的拉取请求。确保Jira票证编号在您的拉取请求标题的开头,与提交标题相同。
等待其他贡献者或提交者查看您的新添加内容,并等待CI构建完成。
等待提交者提交补丁。如果需要,可以通过向Apache Thrift邮件列表发送消息来微调提交者。
如果您想在本地构建项目
对于Windows系统,请参阅CMake自述文件上的详细说明。
对于Windows Native C ++构建,请参阅WinCPP README上的详细说明。
对于unix系统,请参阅Docker README上的详细说明。
如果您想查看未解决的问题……
查看GitHub Pull Request Backlog。代码审查对所有人开放。
查看Jira问题跟踪器。您可以搜索与您感兴趣或当前使用的语言相关的票证,例如,通过Jira搜索(问题->搜索问题查询project =
THRIFT AND ponent in ("Erlang - Library") and status not in (resolved,
closed)将找到所有未解决的Erlang库问题。
如果发现缺陷……
检查问题是否已经在Jira问题跟踪器中。
如果没有,请创建一个票证,描述您在Jira问题跟踪器中提出的更改。
使用GitHub pull request方法贡献代码更改:
要根据本地目录中的更改创建补丁,请执行以下操作:
git diff >
然后等待贡献者或提交者查看您的更改,然后等待提交者应用您的补丁。这不是提交更改的首选方法,并且对于必须随后为您创建拉取请求的提交者造成了额外的开销。
GitHub拉取请求的配方
有时候,通信者可能会要求您在请求请求中采取措施。这里有一些食谱,可以帮助您完成这些请求。这些示例假定您正在处理Jira问题THRIFT-。您还应该熟悉上游存储库的概念。
如果尚未提交请求请求,或者尚未重新建立现有请求请求的基础,则可以将所有提交压缩为单个提交。这使提交者的生活更加轻松。如果您在GitHub上的拉取请求具有多个提交,则应执行此操作。
使用该命令git log来确定自开始以来您进行了多少次提交。
使用命令git rebase -i HEAD~N,其中N是提交数。
在第一行中保留“ pull”。
将所有其他行从“拉”更改为“修正”。
现在,所有更改都在一个提交中。
如果您已经有一个未完成的拉取请求,则由于更改了提交历史记录,因此需要执行“强制推送”来覆盖它:
git push -u origin THRIFT- --force
在Git Ready上可以找到壁球的详细介绍。
重新整理您的拉取请求
如果您的拉取请求与主请求有冲突,则需要重新设置其基础:
如果您的拉取请求包含的提交不属于您,那么您应该使用以下技术来修复分支中的错误合并:
此过程仅将您的提交应用于当前的提交,然后将它们压缩为单个提交,然后您将本地THRIFT--take-强制推送到代表您的拉取请求的远程THRIFT-中,所有与新提交的提交。
该页面是由Apache Thrift的源代码树文档生成的: CONTRIBUTING.md
Apache Thrift网络堆栈的简单表示
传输层为从网络读取/向网络写入提供了简单的抽象。这使Thrift可以将基础传输与系统的其余部分解耦(例如,序列化/反序列化。
除了上面的传输接口之外,Thrift还使用ServerTransport接口来接受或创建原始传输对象。顾名思义,ServerTransport主要用于服务器端,为传入的连接创建新的传输对象。
以下是大多数Thrift支持的语言可用的传输方式:
文件:读/写磁盘上的文件/从磁盘上的文件读/写
http:顾名思义
协议抽象定义了一种将内存中的数据结构映射为有线格式的机制。换句话说,协议指定数据类型如何使用基础传输来对其自身进行编码/解码。因此,协议实现控制编码方案,并负责(反序列化。从这个意义上来说,协议的一些示例包括JSON,XML,纯文本,紧凑二进制等。
节俭协议通过设计面向流。不需要任何明确的框架。例如,在开始序列化字符串之前,不必知道字符串的长度或列表中的项目数。大多数受Thrift支持的语言可用的一些协议是:
二进制:非常简单的二进制编码–字段的长度和类型被编码为字节,然后是字段的实际值。
紧凑:描述于THRIFT-
处理器封装了从输入流读取数据并写入输出流的功能。输入和输出流由协议对象表示。处理器界面非常简单
特定于服务的处理器实现由编译器生成。处理器本质上是从线路读取数据(使用输入协议,将处理委托给处理程序(由用户实现,并通过线路写入响应(使用输出协议。
服务器将上述所有各种功能汇总在一起:
创建用于传输的输入/输出协议
根据输入/输出协议创建处理器
等待传入的连接并将其交给处理器