Remote Procedure Call
遠端程序呼叫(RPC)是一種 client/server 模式的通訊協議,伺服器端可接收用戶端傳遞的參數,並調用對應的函式,將函式執行結果回傳用戶端。 gRPC 是源自 Google 的開源技術,g 就是 google 的意思。其他類型的 RPC 則有 XML-RPC、JSON-RPC 等。
gRPC 的特色
- 跨平台
gRPC 不受限於特定語言或平台,即使伺服器端與用戶端使用不同語言也可通訊。 - Protocol Buffers
gRPC 使用 Protocol Buffers 做二進位制傳輸,速度快且流量小。
多元的通訊模式
- Unary gRPC
類似一般 HTTP API,用戶端發出單一請求,並等待伺服器發出回應。 - Clinet streaming gRPC
用戶端以串流發送請求,伺服器發出單一回應。 - Server streaming gRPC
用戶端發送單一請求,伺服器以串流發出回應。 - Bidirectional streaming gRPC
用戶端及伺服器端以雙向串流平行通訊,不分順序。
gRPC Web Service 開發流程
- 定義 API 與資料結構
- 生成 gRPC stubs
- 伺服器實現 gRPC
- 用戶端呼叫 gRPC
以 Go 實做 gRPC
官方網站有提供實做指引及範例:gRPC Quick start
需先安裝 Protocol Buffer Compiler
macOS 可透過 Homebrew 安裝
$ brew install protobuf
$ protoc --version # Ensure compiler version is 3+
然後安裝 protocol compiler 的 Go 插件
$ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28
$ protoc-gen-go --version # 安裝後檢視版本號
$ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
$ protoc-gen-go-grpc --version # 安裝後檢視版本號
編寫 proto 檔
提示
Language Guide (proto 3)
實用延伸模組:vscode-proto3