使用Apache Thrift的第一个程序 - 我应该在哪里定义接口?在客户端或服务器代码中

时间:2018-04-24 08:39:04

标签: java php thrift

我正在创建一个php客户端,它通过apache thrift从java服务请求一个函数。我正在关注这个tutorial的php客户端代码。我需要了解一些东西,作为file.thrift生成的接口应该在客户端和服务器上,还是仅在一端?

另外,在客户端代码中,我如何调用调用服务器函数的客户端对象? 在本教程中,我按照这一行

$client = new HbaseClient($protocol);

他如何定义这个课程?

并且在apache thrift tutorial他在python客户端

中确认了同样的错误
# Create a client to use the protocol encoder
client = Calculator.Client(protocol)

Calculator对象是从界面中标识的服务器提供的服务吗?同样的问题接口应该在客户端和服务器上?

请帮助,我真的被卡住了。

1 个答案:

答案 0 :(得分:2)

  

我正在学习本教程

以下是真实的:http://thrift.apache.org/tutorial/

  

作为file.thrift生成的接口应该在客户端和服务器上,还是仅在一端?

起点是IDL文件。 IDL表示接口定义语言,它只是一个文件,描述服务器和客户端之间的API协定。服务器的任务是实现合同中描述的接口,以便客户端可以调用它。

要使用IDL文件,可以运行Thruift编译器为两端生成一些代码。如果服务器和客户端使用相同的语言(比如Java),只需生成一次代码并在两个项目中使用它就足够了:

  thrift -r -gen java MyApiContract.thrift

创建一个包含文件的gen-java文件夹。

如果服务器和客户端是不同类型的代码(例如Java和PHP),那么您将需要为它们生成代码:

  thrift -r -gen java -gen php MyApiContract.thrift

将分别生成两个文件夹gen-javagen-php

由于Thrift是一个跨平台的跨语言框架,因此用不同语言编写的客户端和服务器根本就不是这种情况。