我正在创建一个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对象是从界面中标识的服务器提供的服务吗?同样的问题接口应该在客户端和服务器上?
请帮助,我真的被卡住了。
答案 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-java
和gen-php
。
由于Thrift是一个跨平台的跨语言框架,因此用不同语言编写的客户端和服务器根本就不是这种情况。