grpc學習筆記

2021-08-28 05:27:05 字數 3059 閱讀 8001

在 grpc 裡客戶端應用可以像呼叫本地物件一樣直接呼叫另一台不同的機器上服務端應用的方法,使得您能夠更容易地建立分布式應用和服務。與許多 rpc 系統類似,grpc 也是基於以下理念:定義乙個服務,指定其能夠被遠端呼叫的方法(包含引數和返回型別)。在服務端實現這個介面,並執行乙個 grpc 伺服器來處理客戶端呼叫。在客戶端擁有乙個存根能夠像服務端一樣的方法。

正如其他 rpc 系統,grpc 基於如下思想:定義乙個服務, 指定其可以被遠端呼叫的方法及其引數和返回型別。grpc 預設使用 protocol buffers 作為介面定義語言,來描述服務介面和有效載荷訊息結構。如果有需要的話,可以使用其他替代方案。

service helloservice 

message hellorequest

message helloresponse

grpc 允許你定義四類服務方法:

rpc sayhello(hellorequest) returns (helloresponse)
rpc lotsofreplies(hellorequest) returns (stream helloresponse)
rpc lotsofgreetings(stream hellorequest) returns (helloresponse)
rpc bidihello(stream hellorequest) returns (stream helloresponse)
我們將在下面 rpc 生命週期章節裡看到各類 rpc 的技術細節。

grpc 提供 protocol buffer 編譯外掛程式,能夠從乙個服務定義的 .proto 檔案生成客戶端和服務端**。通常 grpc 使用者可以在服務端實現這些api,並從客戶端呼叫它們。

grpc 的安裝:

$ pip install grpcio

$ pip install protobuf

安裝 python grpc 的 protobuf 編譯工具:

$ pip install grpcio-tools

下面我們使用 grpc 定義乙個介面,該介面實現對傳入的資料進行大寫的格式化處理。 

* 建立專案 python demo 工程: 

client目錄下的 main.py 實現了客戶端用於傳送資料並列印接收到 server 端處理後的資料 

server 目錄下的 main.py 實現了 server 端用於接收客戶端傳送的資料,並對資料進行大寫處理後返回給客戶端

example 包用於編寫 proto 檔案並生成 data 介面

syntax = "proto3";

package example;

service formatdata

}message data

#! /usr/bin/env python

# -*- coding: utf-8 -*-

import grpc

import time

from concurrent import futures

from example import data_pb2, data_pb2_grpc

_one_day_in_seconds = 60 * 60 * 24

_host = 'localhost'

_port = '8080'

class formatdata(data_pb2_grpc.formatdataservicer):

def doformat(self, request, context):

str = request.text

return data_pb2.data(text=str.upper())

def serve():

grpcserver = grpc.server(futures.threadpoolexecutor(max_workers=4))

data_pb2_grpc.add_formatdataservicer_to_server(formatdata(), grpcserver)

grpcserver.add_insecure_port(_host + ':' + _host)

grpcserver.start()

try:

while true:

time.sleep(_one_day_in_seconds)

except keyboardinterrupt:

grpcserver.stop(0)

if __name__ == '__main__':

serve()

#! /usr/bin/env python

# -*- coding: utf-8 -*-

import grpc

from example import data_pb2, data_pb2_grpc

_host = 'localhost'

_port = '8080'

def run():

conn = grpc.insecure_channel(_host + ':' + _port)

client = data_pb2_grpc.formatdatastub(channel=conn)

response = client.doformat(data_pb2.data(text='hello,world!'))

print("received: " + response.text)

if __name__ == '__main__':

run()

gRPC學習筆記 一 gRPC簡述

rpc 遠端過程呼叫 remote procedure call 是一種通過網路從其它程序或者其他主機上的程序請求服務的方式。rpc是分布式系統的基礎。grpc是主要由google公司開發的乙個高效能 通用的開源rpc框架。grpc基於http2.0協議,基於protobuf序列化協議,語言中立 平...

GRPC學習筆記(一)

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

gRPC學習筆記1 簡單介紹

grpc 是谷歌開源的輕量級 rpc 通訊框架,在微服務架構中經常用到。grpc 是谷歌開源的輕量級 rpc 通訊框架,其中的通訊協議基於二進位制資料流,使得 grpc 具有優異的效能。grpc 支援 http 2.0 協議,使用二進位制幀進行資料傳輸,還可以為通訊雙方建立持續的雙向資料流。基礎概念...