gRPC快速入門記錄

2022-03-14 04:44:17 字數 3765 閱讀 2483

1.protocl buffer一種高效的序列化結構。

2.支援http 2.0標準化協議。

1.http/2對每個源只需建立乙個持久連線,在這乙個連線內,可以並行的處理多個請求和響應,而且做到不相互影響。

2.允許客戶端和服務端實現自己的資料流和連線流控制,這對我們傳輸大資料非常有幫助。

這裡我們需要使用 protobuf 直譯器 將 protobuf 語法的**轉化成對應語言的**,以及使用 grpc 實現跨越性,所以我們需要先安裝它們。

本教程中只會用到 python3 以及 golang ,所以我們只安裝這兩個語言的直譯器就足夠了

安裝 grpc 庫

pip3 install grpcio
安裝 grpc 工具 以及 protobuf 直譯器

pip3 install grpcio-tools googleapis-common-protos
安裝 grpc 庫:

go get -u -v google.golang.org/grpc
mkdir protobuf && cd protobuf
wget
unzip protoc*.zip
rm protoc*.zip
移動 protobuf 目錄到 ~/.local

mv ~/protobuf/ ~/.local/
將 protobuf 的可執行檔案新增進系統變數

echo "path=\"\$home/.local/protobuf/bin:\$path\"" >> ~/.profile
安裝 protobuf go 語言的外掛程式

go get -u github.com/golang/protobuf/protoc-gen-go
將外掛程式新增進系統變數

echo "path=\$path:\$gopath/bin" >> ~/.profile
然後使用 cd 命令回到使用者根目錄

cd
建立工程目錄並進入目錄

mkdir $gopath/src/demo && cd $gopath/src/demo
proto 檔案為 protobuf 的副檔名,我們編寫這個檔案用於生成 python 與 go 都支援的**。

這裡我們再新建乙個目錄用來容納 proto 檔案以及 使用 protobuf 編譯器轉化過的**

建立目錄並進入目錄

mkdir hello && cd hello
接下來開始編寫 proto 檔案,這裡我們新建乙個 名為 hello.proto 的檔案並在裡面寫入以下內容

syntax = "proto3"; //指定語法為 protobuf3 語法,如果不寫這句的話預設語法為 protobuf2

package hello; //指定包名,這句在本次演示中只對 go 生效,python 的 protobuf 直譯器會忽略它

service greeter // 接受 hellorequest 返回 helloreply,sayhello 需要自己在服務端實現

}message hellorequest

message helloreply

完成後儲存並退出編輯

編輯好 proto 檔案後我們並不能直接使用它,還需要將它轉化成對應語言的**才能使用

生成 go 語言的**

protoc hello.proto --go_out=plugins=grpc:.
生成 python 的**

python3 -m grpc_tools.protoc -i . --python_out=. --grpc_python_out=. hello.proto
然後我們回到 demo 工程目錄,開始真正的 **編寫

cd ..
服務端端這裡我採用的 go 語言進行編寫

建立乙個名為 server.go 的檔案並寫入以下內容

package main

import (

"context"

"google.golang.org/grpc"

"google.golang.org/grpc/reflection"

"log"

"demo/hello"

"net"

)const (

port = ":50051" // 監聽埠

)type server struct{}

func (s *server) sayhello(ctx context.context, in *hello.hellorequest) (*hello.helloreply, error) , nil //拼接客戶端傳送過來的訊息,並返回給客戶端

}func main()

s := grpc.newserver()

hello.registergreeterserver(s, &server{})

reflection.register(s) // 在 grpc 上註冊服務

if err := s.serve(lis); err != nil

}

客戶端我採用的 python3 進行編寫

建立乙個名為 client.py 的檔案寫入以下內容

#! /usr/bin/env python3

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

import grpc # 匯入 grpc 模組

import sys

import hello_pb2 #匯入我們剛才從 helloworld.proto 生成的 python **

import hello_pb2_grpc

def run():

with grpc.insecure_channel('localhost:50051') as channel: # 建立連線到服務端的通道

stub = hello_pb2_grpc.greeterstub(channel) #建立提供呼叫的存根

response = stub.sayhello(hello_pb2.hellorequest(name = 'niconiconi')) #呼叫 sayhello 方法 傳送我們剛才在 proto 檔案中定義的字段,返回我們在 proto 中定義的返回值

print("greeter client received: " + response.message) #列印返回值

if __name__ == '__main__':

run()

首先我們啟動服務端

go run server.go
使用 ctrl + z 將 正在執行的服務端掛起在後台,然後使用 bg命令使掛起的 程式繼續執行。

接下來執行我們編寫的客戶端

python3 client.py
不出意外的話你的螢幕上應該會列印

greeter client received: hello niconiconi
到這裡 演示就全部結束了。

GRPC基礎入門

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

gRPC入門小結

首先要知道rpc是什麼 remote procedure call的簡稱,翻譯成中文就是遠端過程呼叫。rpc主要是為了解決以下倆個問題 grpc 一開始由 google 開發,是一款語言中立 平台中立 開源的遠端過程呼叫 rpc 系統,g有global的意思 在grpc裡客戶端應用可以像呼叫本地物件...

go版本gRPC入門

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