您好,登錄后才能下訂單哦!
一、前言:
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
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 代碼
生成如下結構
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不匹配
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。