国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python使用gRPC傳輸協(xié)議教程

2020-02-15 23:14:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

gRPC 簡(jiǎn)介:

gRPC 是一款高性能、開(kāi)源的 RPC 框架,產(chǎn)自 Google,基于 ProtoBuf 序列化協(xié)議進(jìn)行開(kāi)發(fā),支持多種語(yǔ)言(Golang、Python、Java等),本篇只介紹 Python 的 gRPC 使用。因?yàn)?gRPC 對(duì) HTTP/2 協(xié)議的支持使其在 Android、IOS 等客戶端后端服務(wù)的開(kāi)發(fā)領(lǐng)域具有良好的前景。gRPC 提供了一種簡(jiǎn)單的方法來(lái)定義服務(wù),同時(shí)客戶端可以充分利用 HTTP2 stream 的特性,從而有助于節(jié)省帶寬、降低 TCP 的連接次數(shù)、節(jié)省CPU的使用等。

安裝:

gRPC 的安裝:

$ pip install grpcio

安裝 ProtoBuf 相關(guān)的 python 依賴庫(kù):

$ pip install protobuf

安裝 python grpc 的 protobuf 編譯工具:

$ pip install grpcio-tools

GRPC使用案例

下看一下項(xiàng)目目錄結(jié)構(gòu)

grpc是一套傳輸協(xié)議,我們需要在底層實(shí)現(xiàn)這套傳輸協(xié)議.當(dāng)然這些工作都已經(jīng)被做完了,所以我們只要學(xué)會(huì)使用一個(gè)具有g(shù)rpc傳輸協(xié)議的服務(wù)器和在客戶端上調(diào)用grpc傳輸協(xié)議傳輸數(shù)據(jù)就可以了.

grpc傳輸協(xié)議傳輸?shù)臄?shù)據(jù)類型為protobuf數(shù)據(jù).所以grpc都是和protobuf一塊使用.

(1)新建data.proto文件,定義傳輸?shù)臄?shù)據(jù)格式和grpc服務(wù)要實(shí)現(xiàn)的函數(shù)

syntax = "proto3";package example;service FormatData {  //定義服務(wù),用在rpc傳輸中 rpc DoFormat(actionrequest) returns (actionresponse){}}message actionrequest { string text = 1;}message actionresponse{ string text=1;}

(2)生成proto數(shù)據(jù)的python調(diào)用格式和grpc服務(wù)接口

在proto文件目錄下 調(diào)用下列命令

$ python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./data.proto

會(huì)生成:data_pb2.py 與 data_pb2_grpc.py, 其中data_pb2.py是數(shù)據(jù)格式調(diào)用的文件,data_pb2_grpc.py是grpc傳輸協(xié)議接口調(diào)用的文件.

(3)創(chuàng)建實(shí)現(xiàn)了grpc傳輸協(xié)議的服務(wù)器端

在服務(wù)器端代碼中需要實(shí)現(xiàn)proto文件中編寫的服務(wù)接口,并重寫處理函數(shù),將重寫后的服務(wù)類實(shí)例化以后添加到grpc服務(wù)器中,這樣創(chuàng)建的grpc服務(wù)器就可以實(shí)現(xiàn)自定義的proto傳輸服務(wù)了.

# 實(shí)現(xiàn)了 server 端用于接收客戶端發(fā)送的數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行大寫處理后返回給客戶端# ! /usr/bin/env python# -*- coding: utf-8 -*-import grpcimport timefrom concurrent import futuresfrom example import data_pb2, data_pb2_grpc_ONE_DAY_IN_SECONDS = 60 * 60 * 24_HOST = 'localhost'_PORT = '8080'# 實(shí)現(xiàn)一個(gè)派生類,重寫rpc中的接口函數(shù).自動(dòng)生成的grpc文件中比proto中的服務(wù)名稱多了一個(gè)Servicerclass FormatData(data_pb2_grpc.FormatDataServicer):  # 重寫接口函數(shù).輸入和輸出都是proto中定義的Data類型  def DoFormat(self, request, context):    str = request.text    return data_pb2.actionresponse(text=str.upper()) # 返回一個(gè)類實(shí)例def serve():  # 定義服務(wù)器并設(shè)置最大連接數(shù),corcurrent.futures是一個(gè)并發(fā)庫(kù),類似于線程池的概念  grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))  # 創(chuàng)建一個(gè)服務(wù)器  data_pb2_grpc.add_FormatDataServicer_to_server(FormatData(), grpcServer) # 在服務(wù)器中添加派生的接口服務(wù)(自己實(shí)現(xiàn)了處理函數(shù))  grpcServer.add_insecure_port(_HOST + ':' + _PORT)  # 添加監(jiān)聽(tīng)端口  grpcServer.start()  # 啟動(dòng)服務(wù)器  try:    while True:      time.sleep(_ONE_DAY_IN_SECONDS)  except KeyboardInterrupt:    grpcServer.stop(0) # 關(guān)閉服務(wù)器if __name__ == '__main__':  serve()            
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 萝北县| 汕头市| 旺苍县| 彭阳县| 通榆县| 马尔康县| 沾化县| 乾安县| 丰镇市| 静乐县| 汉中市| 宣武区| 江西省| 蓝山县| 察隅县| 朝阳区| 于田县| 孝昌县| 株洲县| 当雄县| 顺义区| 昌宁县| 南澳县| 时尚| 泸州市| 清远市| 玛沁县| 新干县| 曲麻莱县| 汉寿县| 石屏县| 盖州市| 万年县| 绵竹市| 洪江市| 临西县| 瓮安县| 长宁区| 措美县| 基隆市| 姜堰市|