Python3實踐thrift協議小實驗

2021-09-23 17:10:45 字數 2552 閱讀 4053

接下來,自己寫個簡單的thrift協議,儲存為hello.thrift檔案如下

/*

thrift介面定義檔案

say介面接收乙個引數msg,返回數值型別

body介面接收3個引數,返回字串型別

*/service helloservice

然後使用thrift分別生成python**:在cmd輸入如下命令

thrift-0.12.0.exe --gen py hello.thrift
則會生成如下資料夾gen-py:

進入gen-py目錄:

新建服務端python**, service.py:

# coding: utf-8

from hello import helloservice

from hello.ttypes import *

from thrift.transport import tsocket

from thrift.transport import ttransport

from thrift.protocol import tbinaryprotocol

from thrift.server import tserver

class helloservicehandler:

def say(self, msg):

ret = "服務端接收到的資訊為:" + msg

print (ret)

return len(msg) # 返回int,與thrift檔案中定義的返回i32資料型別一致

def body(self, id, name, age):

return f'id是, 姓名是, 年齡是' # 返回string,與thrift檔案中一致

handler = helloservicehandler()

processor = helloservice.processor(handler) # 定義乙個tprocess處理類,建立tprocess物件

transport = tsocket.tserversocket("localhost", 9090) # 設定網路讀寫

tfactory = ttransport.tbufferedtransportfactory()

pfactory = tbinaryprotocol.tbinaryprotocolfactory()

server = tserver.t******server(processor, transport, tfactory, pfactory)

print("啟動服務")

server.serve()

編寫客戶端python**,client.py:

# coding: utf-8

from hello import helloservice

from thrift import thrift

from thrift.transport import tsocket

from thrift.transport import ttransport

from thrift.protocol import tbinaryprotocol

while true:

try:

transport = tsocket.tsocket('localhost', 9090) # 建立乙個傳輸層物件(ttransport),設定呼叫的服務位址為本地,埠為 9090,tsocket傳輸方式

transport = ttransport.tbufferedtransport(transport)

protocol = tbinaryprotocol.tbinaryprotocol(transport) # 建立通訊協議物件(tprotocol),設定傳輸協議為 tbinaryprotocol

client = helloservice.client(protocol) # 建立乙個thrift客戶端物件

transport.open()

send_msg = input("客戶端傳送資訊:")

rec_msg = client.say(send_msg)

print("say方法返回的資訊為:" , rec_msg)

rec_msg = client.body(2, send_msg, 28)

print('body方法返回的資訊為:', rec_msg)

except thrift.texception as ex:

print(ex.message)

finally:

transport.close()

然後分別用2個cmd視窗,先執行服務端**,再執行客戶端**,效果如下:

python3爬蟲實踐(二) 爬蟲前奏

1.1 什麼是網路爬蟲 1.2 通用爬蟲和聚焦爬蟲 2.1 什麼是 http 和 https 協議 2.2 在瀏覽器中傳送乙個 http 請求的過程 2.3 url 詳解 scheme host port path query string anchor2.4 常用請求方法 get 請求 一般情況下...

python3爬蟲實踐(七) xpath介紹

1 什麼是 xpath 2 xpath 開發工具 3 xpath 語法 表示式描述 示例結果 nodename 選取此節點的所有節點 bookstore 選取 bookstore 下所有的子節點 如果是在最前面,代表從根節點擊取。否則選擇某節點下的某個節點 bookstore 選取根元素下所有的 b...

python3爬蟲實踐(八) lxml 庫

1 基本使用 from lxml import etree text 標題的效果 四級標題的效果 利用 etree.html 將字串解析為 html 檔案 html etree.html text 將字串序列化為 html 文件 2 從檔案中讀取 html from lxml import etre...