您好,登錄后才能下訂單哦!
一、前言:
Thrift 是一種接口描述語言和二進(jìn)制通信協(xié)議。以前也沒接觸過,最近有個(gè)項(xiàng)目需要建立自動化測試,這個(gè)項(xiàng)目之間的微服務(wù)都是通過 Thrift 進(jìn)行通信的,然后寫自動化腳本之前研究了一下。
需要定義一個(gè)xxx.thrift的文件, 來生成各種語言的代碼,生成之后我們的服務(wù)提供者和消費(fèi)者,都需要把代碼引入,服務(wù)端把代碼實(shí)現(xiàn),消費(fèi)者直接使用API的存根,直接調(diào)用。
和 http 相比,同屬于應(yīng)用層,走 tcp 協(xié)議。Thrift 優(yōu)勢在于發(fā)送同樣的數(shù)據(jù),request包 和 response包 要比 http 小很多,在整體性能上要優(yōu)于 http 。
二、使用方法
環(huán)境準(zhǔn)備:
從官網(wǎng)上下載 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 之前需要定義一個(gè) .thrift 格式的文件,比如 test.thrift
service Transmit { string sayMsg(1:string msg); string invoke(1:i32 cmd 2:string token 3:string data) }
然后運(yùn)行命令:thrift-0.9.3.exe -gen py test.thrift 生成 python 代碼
生成如下結(jié)構(gòu)
2.然后將生成的 python 代碼 和 文件,放到新建的 python 項(xiàng)目中。完成后先運(yùn)行服務(wù)器代碼。
服務(wù)端代碼 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() # 執(zhí)行結(jié)果:cmd不匹配
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。