概述
grpc 是谷歌開源的乙個rpc(遠端程式呼叫)框架,可以輕鬆實現跨語言,跨平台程式設計,其採用grpc協議(基於http2)。
rpc:
remote procezdzcbxidure call, 翻譯過來就是是遠端程式呼叫。具體來說,就是客戶端c1需要呼叫伺服器s1上的某個方法(函式),得到相應的返回值並傳遞給c1。
grpc協議
要說grpc協議需要先了解http2, 雖然http1.x 協議至今仍是主流協議,但是隨著我們對效能要求越來越高,和web規模的不斷擴大,http2就應運而生。
在這裡,我們只需要知道其效能是高於現有的http1就好了,感興趣的朋友可以深入了解http2。
使用原因
在上家公司,因為之前的專案有一下幾個痛點,所以決定採用rpc框架:
所以我們花了點時間處理這些問題,將訂單,使用者等模組拆開,方便獨立部署,獨立公升級,獨立維護,這樣可以大大提高維護效率和專案的伸縮性。
使用方法
1.準備.proto檔案
syntax = "proto3";
package order;
message orderrequest
message jsonresponse
service orderhandler
}// 其zdzcbxi中:
// message: 定義資料結構
// service: 定義介面的名字,引數,
2.生成所需檔案(伺服器和客戶端均需要)
python -m grpc_tools.protoc -i./ --python_out=./ --grpc_python_out=./ ./*.proto
執行後會生成兩個檔案(test_pb2.py, test_pb2_grpc.py)
3.編寫server端**
import time
import test_pb2
import test_pb2_gzdzcbxirpc
import grpc
def test(request):
# 實際呼叫到的函式
json_response = t
json_response.rst_string = json.dumps()# 構造出proto檔案中定義的返回值格式
return json_response
class orderhandler(test_pb2_grpc.orderhandlerservicer):
'''grpc請求會進入這個類中進行分發,根據客戶端請求的方法找到對應的處理方法
感興趣的可以打斷點檢視request, context中的內容,他們包含了請求的所有資訊
'''def create_order(self, request, context):
return test(request, context)
def serve():
# 開啟grpc服務,監聽特定埠,
server = grpc.server(futures.threadpoolexecutor(max_workers=10))
test_pb2_grpc.add_orderhandlerservicer_to_server(
orderhandler(), server)
server.add_insecure_port('[::]:{}'.format(12006))
server.start()
try:
while true:
time.sleep(186400)
except keyboardinterrupt:
server.stop(0)
serve()
4.編寫客戶端**進行 測試 client.py
import grpc
import test_pb2_grpc
import test_pb2
channel = grpc.insecure_channel("127.0.0.1:12006")
stub = test_pb2_grpc.orderhandlerstub(channel)
# 要完成請求需要先構造出proto檔案中定義的請求格www.cppcns.com式
ret = stub.create_order(test_pb2.orderrequest(phone="12990", price="50"))
print(ret.rst_string)
本文標題: python使用rpc框架grpc的方法
本文位址:
實現RPC框架
什麼是rpc client端 student student call serveraddr,addage,student 1.將這個呼叫對映為call id。2.將call id,student params 序列化,以二進位制形式打包 3.把2中得到的資料報傳送給serveraddr,這需要使用...
rpc框架解釋
rpc是指遠端過程呼叫,也就是說兩台伺服器a,b,乙個應用部署在a伺服器上,想要呼叫b伺服器上應用提供的函式 方法,由於不在乙個記憶體空間,不能直接呼叫,需要通過網路來表達呼叫的語義和傳達呼叫的資料。首先,要解決通訊的問題,主要是通過在客戶端和伺服器之間建立tcp連線,遠端過程呼叫的所有交換的資料都...
RPC框架特性
既然是協議就只是一套規範,那麼就需要有人遵循這套規範來進行實現。目前典型的rpc實現包括 dubbo thrift grpc hetty等。既然rpc的客戶端認為自己是在呼叫本地物件。那麼傳輸層使用的是tcp udp還是http協議,者是一些其他的網路協議它就不需要關心了。既然網路協議對其透明,那麼...