python 使用 thrift 教程

python 使用 thrift 教程https://www.cnblogs.com/shenh/p/10529073.html一、前言:Thrift是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过Thrift进行通信的,然后写自动化脚本之前研究了一下。需要定义

大家好,欢迎来到IT知识分享网。

https://www.cnblogs.com/shenh/p/10529073.html

一、前言:  

  Thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 Thrift 进行通信的,然后写自动化脚本之前研究了一下。

  需要定义一个xxx.thrift的文件, 来生成各种语言的代码,生成之后我们的服务提供者和消费者,都需要把代码引入,服务端把代码实现,消费者直接使用API的存根,直接调用。

  和 http 相比,同属于应用层,走 tcp 协议。Thrift 优势在于发送同样的数据,request包 和 response包 要比 http 小很多,在整体性能上要优于 http 。

 

二、使用方法

环境准备:

  • 从官网上下载 windows 版的 thrift.exe:http://archive.apache.org/dist/thrift/0.9.3/ (我这里用的是0.9.3版本)
  • python版本:Python 3.7.1
  • pip3 install thrift

 

1.首先使用 thrift 之前需要定义一个 .thrift 格式的文件,比如 test.thrift

python 使用 thrift 教程

service Transmit {
string sayMsg(1:string msg); string invoke(1:i32 cmd 2:string token 3:string data) }

然后运行命令:thrift-0.9.3.exe -gen py  test.thrift  生成 python 代码

python 使用 thrift 教程

生成如下结构

python 使用 thrift 教程

 

 2.然后将生成的 python 代码 和 文件,放到新建的 python 项目中。完成后先运行服务器代码。

 服务端代码 server.py:

import json from test import Transmit from test.ttypes import * from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol from thrift.server import TServer import socket class TransmitHandler: def __init__(self): self.log = {} def sayMsg(self, msg): msg = json.loads(msg) print("sayMsg(" + msg + ")") return "say " + msg + " from " + socket.gethostbyname(socket.gethostname()) def invoke(self,cmd,token,data): cmd = cmd token =token data = data if cmd ==1: return json.dumps({token:data}) else: return 'cmd不匹配' if __name__=="__main__": handler = TransmitHandler() processor = Transmit.Processor(handler) transport = TSocket.TServerSocket('127.0.0.1', 8000) tfactory = TTransport.TBufferedTransportFactory() pfactory = TBinaryProtocol.TBinaryProtocolFactory() server = TServer.TSimpleServer(processor, transport, tfactory, pfactory) print("Starting python server...") server.serve()

 

客户端代码 client.py

import sys import jsonfrom test import Transmit from test.ttypes import * from test.constants import * from thrift import Thrift from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol transport = TSocket.TSocket('127.0.0.1', 8000) transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport) client = Transmit.Client(protocol) # Connect! transport.open() cmd = 2 token = '1111-2222-3333-4444' data = json.dumps({"name":"zhoujielun"}) msg = client.invoke(cmd,token,data) print(msg) transport.close() # 执行结果:

cmd不匹配

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34445.html

(0)
上一篇 2024-01-07 18:00
下一篇 2024-01-08 14:00

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信