Protocol Buffers是Google所提供的跨語言資料結構協定,系統與系統溝通,會有資料型態的不同。
安裝 Protocol Buffers
// v3.12.3
brew install protobuf
專案架構
Project
|-- proto
|-- myproto.proto
|-- go-grpc
|-- pro
|-- server
|-- main.go
|-- client
|-- main.go
|-- go.mod
|-- node-grpc
|-- pro
|-- server
|-- index.js
|-- client
|-- index.js
|-- pacakge.json
GoLang 環境設定
確認 protobuf 插件
官方文件要細看,這邊有一個比較大的坑,在攥寫這篇文章時,官方的protobuf,go的部分還在整合,可以查看這篇Issues。
- 預設的 protobuf 插件 -
protoc-gen-go
,brew install protobuf
已安裝 - 需安裝 protobuf 插件 -
protoc-gen-go-grpc
,brew install protobuf
無安裝
安裝 protoc-gen-go-grpc
git clone https://github.com/grpc/grpc-go
cd cmd/protoc-gen-go-grpc
go install .
如何使用 protoc-gen-go
protoc --go_out=go-grpc \
--proto_path=proto proto/myproto.proto
會在 go-grpc/pro
底下產出 myproto.pb.go
如何使用 protoc-gen-go-grpc
protoc --go-grpc_out=go-grpc \
--proto_path=proto proto/myproto.proto
會在 go-grpc/pro
底下產出 myproto_grpc.pb.go
確認 golang grpc 套件版本 go-grpc/go.mod
module go-grpc
require (
github.com/golang/protobuf v1.4.2
google.golang.org/grpc v1.30.0
google.golang.org/protobuf v1.25.0
)
延伸閱讀:gRPC - ProtoBuf 轉譯後使用 golang 篇
Node 環境設定
知道其實gprc_out 指令相關的Tools要另外安裝,只是要翻找一波就是了…
重點來了,並不是使用 protoc
去產出 gprc file
,而是使用npm plugin…。
Github: grpc/grpc-node
官方文件介紹了幾款gRPC的套件,快速篩選一下所需要的包
- grpc-native-core - 2021 4月 棄用掰 (包含了C++語法)
- grpc-js - 完全Javascript gRPC包 (完全捨棄C++,目前文檔不足)
- proto-loader - 可直接閱讀
.proto
- grpc-tools - 產出gRPC的js檔案,官方範例所使用的插件!!!
- grpc-health-check - 顧名思義 Health Cheak
以上的套件只好全略過了,直接看官方範例,使用其中一個套件grpc
。(2020-07-30 紀錄)
node-grpc/package.json
{
"name": "node-grpc",
"version": "1.0.0",
"description": "learn for grpc",
"scripts": {
"proto": "npx grpc_tools_node_protoc -I=../proto ../proto/*.proto --js_out=import_style=commonjs,binary:./pro --grpc_out=./pro"
},
"keywords": [
"gPRC"
],
"author": "Hifounder",
"license": "ISC",
"devDependencies": {
"grpc-tools": "^1.9.1"
},
"engines": {
"node": ">=12.0"
},
"dependencies": {
"grpc": "^1.24.3"
}
}
NodeJS
的Proto
是使用npx grpc_tools_node_protoc
去產生資料的pd.js
和gcp_pd.js
。
延伸閱讀:gRPC - ProtoBuf 轉譯後使用 Node 篇
Web 環境設定
到底什麼是Web環境設定…,我必須先擱置這個項目,簡單瞭解一張圖片即可知道畫面本身。系統架構溝通來自於不同,一般來說前後端分離用RESTful溝通,這種溝通方式可以切割工作項目以及微服務設計,當全都以gRPC溝通時,狀態會改變成上方圖片中的左方。
文章參考: gRPC-Web发布,REST又要被干掉了?
大概講解連線做法:
[ Web APP ] --- [ Envoy ] --- [ gRPC Server ]
根據上方幾次的經驗就是,沒錯grpc的部分要自己安裝
git clone https://github.com/grpc/grpc-web.git
cd grpc-web
sudo make install-plugin
如何生產pd.js
和web_pd.js
protoc -I=./proto ./proto/*.proto \
--js_out=import_style=commonjs,binary:. \
--grpc-web_out=import_style=commonjs,mode=grpcwebtext:.
在如果我沒遇到上方那張圖片的時候,我確實被搞混了,坑很深很多,以web app
的部分暫以RESTful方式…。
小結
只能說"複雜",環境的部分就耗掉了我非常多的精氣神,非常不建議對RESTful不熟悉的人直上這個怪物環境,甚至對於網路層的理解需要有一定的知識,還有多程式語言(最少2個)的掌握,web app
就先用RESTful
,之後再來研究…(菸