gRPC入門小結

2022-06-18 12:00:12 字數 3084 閱讀 2446

首先要知道rpc是什麼:remote procedure call的簡稱,翻譯成中文就是遠端過程呼叫

rpc主要是為了解決以下倆個問題:

grpc 一開始由 google 開發,是一款語言中立、平台中立、開源的遠端過程呼叫(rpc)系統,g有global的意思

在grpc裡客戶端應用可以像呼叫本地物件一樣直接呼叫另一台不同的機器上服務端應用的方法,能夠更加容易的建立分布式應用和服務。

常見的rpc框架有:

grpc。谷歌出品

thrift。apache出品

dubbo。阿里出品,也是乙個微服務框架

grpc的4點特性:

使用protocal buffers這個強大的結構資料序列化工具

grpc可以跨語言使用

安裝簡單,擴充套件方便(用該框架每秒可達到百萬個rpc)

基於http2協議

grpc使用流程:

定義標準的proto檔案

生成標準**

服務端使用生成的**提供服務

客戶端使用生成的**呼叫服務

谷歌開源的一種結構資料序列化的工具,比方說json、xml也是結構資料序列化的工具,不同的是,

protocol buffers序列化後的資料是不可讀的,因為是二進位製流

使用protocol buffer需要事先定義資料的格式(.proto 協議檔案),還原乙個序列化之後的資料需要使用到這個資料格式

protocol buffer 比 xml、json快很多,因為是基於二進位製流,比字串更省頻寬,傳輸速度快

目錄結構:

grpc_test

protos

gym.proto

lightweight

(generated_files)

client.py

server.py

gym.proto

syntax = "

proto3";

//命名空間

package lightweight;

​//健身房

service gym

}//誰在健身

message person

​//結果

message reply

view code

python -m grpc_tools.protoc -i=./protos --python_out=./lightweight --grpc_python_out=./lightweight ./protos/gym.proto

server.py

from concurrent import

futures

import

logging

import

grpc​#

支援新的包

import

sys"

lightweight")

import

lightweight.gym_pb2_grpc as gym_pb2_grpc

import

lightweight.gym_pb2 as gym_pb2​​

class

gym(gym_pb2_grpc.gymservicer):

defbodybuilding(self, request, context):

print(f"

在健身, 動作: ")

return gym_pb2.reply(code=0, msg='ok'

)​​def

serve():

server = grpc.server(futures.threadpoolexecutor(max_workers=10))

gym_pb2_grpc.add_gymservicer_to_server(gym(), server)

server.add_insecure_port(

'[::]:50051')

server.start()

server.wait_for_termination()​if

__name__ == '

__main__':

logging.basicconfig()

serve()

view code

client.py

from

__future__

import

print_function

import

logging

import

grpc​#

支援匯入新的包

import

sys"

lightweight")

import

lightweight.gym_pb2_grpc as gym_pb2_grpc

import

lightweight.gym_pb2 as gym_pb2

​def

run():

with grpc.insecure_channel(

'localhost:50051

') as channel:

stub =gym_pb2_grpc.gymstub(channel)

response =stub.bodybuilding(gym_pb2.person(

name='

chenqionghe

', actions=['

深蹲', '

臥推', '硬拉'

] ))

print(f'

code: , msg:')

​​if__name__ == '

__main__':

logging.basicconfig()

run()

view code

rest api是可用curl和postman這樣的工具來除錯的,grpc也有類似的工具,對應的分別是grpcurl和grpcui(均基於go語言安裝),其中grpcui類似於postman,有web頁面幫助除錯,使用者友好。

GRPC基礎入門

專案中要使用rpc協議框架來實現兩個系統之間的介面呼叫。a系統呼叫b系統的相應介面,因為考慮到http請求會包含更多冗餘資訊,造成請求過大,因此選用了rpc眾多框架中的grpc。grpc是google開源的rpc框架,目前版本1.0.0,看jar包引入包括netty與okhttp,同時序列化中使用的...

go版本gRPC入門

本文通過乙個簡單的示例,了解如何在go中使用grpc。使用命令列安裝 使用以下命令安裝grpc go get google.golang.org grpc 獲取編譯器外掛程式protoc gen go,並將其安裝在 gobin路徑中,預設為 gopath bin。5 必須設定好 path環境變數,協...

go語言 grpc入門

go get google.golang.org grpc1.編寫.proto描述檔案 hello.proto syntax proto3 package proto message string service helloservice2.使用protoc工具生成相應的go 生成的 與porto描...