当我们想在不同的语言中搭建服务端和客户端的通讯时,可以使用 Thrift。Thrift 是一个高效的可扩展的跨语言服务开发框架。本文将阐述如何使用 python 搭建 Thrift 服务端和客户端测试程序。
准备工作
在开始搭建 Thrift 服务端和客户端前,需要安装以下软件:
- Thrift:Apache Thrift 版本不限,本文使用的是 0.15.0 版本;
- Python:本文使用的是 Python 3,版本不限;
- IDE:可选择 PyCharm、VScode 等 Python IDE。
安装 Thrift
安装好 Thrift 后,需要将 Thrift 程序添加到环境变量中,以便在后面的操作中使用 Thrift 命令。
Thrift 示例
这里我们使用一个简单的示例来说明 Thrift 的使用过程。
- 创建 Thrift 文件
首先在项目根目录创建一个 thrift 文件夹,并在其中创建一个 .thrift 文件,命名为 calculator.thrift。在文件中编写以下内容:
namespace py thrift.calculator
struct Operation {
1: i32 num1,
2: i32 num2,
3: string operator
}
service Calculator {
i32 calculate(1: Operation op)
}
- 编译 Thrift 文件
使用以下命令编译上述 thrift 文件:
thrift -r --gen py calculator.thrift
命令执行成功后,将在当前目录生成一个 gen-py 目录,其中包含了生成的 Python 代码。
- 实现服务端
创建一个 server.py 文件,用于实现 Thrift 服务端。文件内容如下:
import sys
sys.path.append('gen-py')
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
from thrift_calculator import Calculator
from thrift_calculator.ttypes import Operation
class CalculatorHandler:
def calculate(self, operation):
if operation.operator == '+':
return operation.num1 + operation.num2
elif operation.operator == '-':
return operation.num1 - operation.num2
elif operation.operator == '*':
return operation.num1 * operation.num2
elif operation.operator == '/':
return operation.num1 / operation.num2
handler = CalculatorHandler()
processor = Calculator.Processor(handler)
transport = TSocket.TServerSocket(host='localhost', port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print('Starting thrift server...')
server.serve()
print('done.')
在上面的服务端代码中,我们创建了 CalculatorHandler 类,并实现了 calculate 方法。在 calculate 方法中,我们根据传入的操作符,分别执行不同的运算,并返回结果。
我们还需要实现 main 方法,用于启动 Thrift 服务。在 main 方法中,我们创建了 CalculatorProcessor 对象和 TServerSocket 对象,并将其传递给 TSimpleServer。最后启动服务。
- 实现客户端
创建一个 client.py 文件,用于实现 Thrift 客户端。文件内容如下:
import sys
sys.path.append('gen-py')
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift_calculator import Calculator
from thrift_calculator.ttypes import Operation
transport = TSocket.TSocket('localhost', 9090)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Calculator.Client(protocol)
transport.open()
operation = Operation(num1=10, num2=5, operator='+')
result = client.calculate(operation)
print(result)
transport.close()
在上面的客户端代码中,我们先创建了 TSocket 和 TBufferedTransport 对象,并将其传递给 TBinaryProtocol。接着创建了 Calculator.Client 对象,并调用其 calculate 方法。最后关闭 transport。
运行程序
在终端分别运行 server.py 和 client.py。
# 启动服务端
python server.py
# 运行客户端
python client.py
运行成功后,客户端输出结果为 15,服务端控制台输出 Starting thrift server...。
总结
通过以上示例,我们了解了如何使用 Python 搭建 Thrift 服务端和客户端。在实际应用中,我们可以将 Thrift 作为不同语言之间进行数据交互的工具,方便快捷。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python thrift搭建服务端和客户端测试程序 - Python技术站