目錄
- 前言
- helloworld.proto
- 小思考
- 小結
- 推薦閱讀
ProtoBuf
是什麼?
ProtoBuf
是一套接口描述語言(IDL),通俗的講是一種資料表達方式,也可以稱為資料交換格式。
我們常用的資料格式有
JSON
和
XML
,為什麼使用
ProtoBuf
?是因為它的傳輸快,為什麼傳輸快?大家可以找下資料。使用
.proto
檔案進行描述要序列化的資料結構,然後将寫好
.proto
檔案使用
protoc
就可以很容易編譯成衆多計算機語言的接口代碼。
gRPC
gRPC
是開源的
RPC
架構,已支援主流的計算機語言,可以通過
ProtoBuf
進行定義接口,可以基于
ProtoBuf
進行資料傳輸。
兩者雖然是一家,但是分别解決不同的問題,可以配合使用,也可以分開。
看一下的
gRPC
helloworld 的
proto
檔案是如何定義的?
syntax = "proto3";
package helloworld;
option go_package = "./;helloworld";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
檔案中定義了一個
service
Greeter 和
rpc
SayHello 方法。
入參:
string
name
出參:
string
message
這些過于簡單,還能不能描述其他資訊?
- 定義的
方法能否也同時支援rpc
調用?例如:SayHello 方法,既支援 gRPC 調用,也支援 HTTP 調用,同時支援HTTP
生成代碼時,同時也生成protoc
接口文檔。Swagger
- 定義的入參能否支援參數驗證?例如:name 長度不能大于 20 個字元。
-
Greeter 服務能否支援攔截器?例如:該服務下的所有方法需要進行登入令牌驗證。service
-
SayHello 方法能夠支援攔截器?例如:目前方法支援開啟和關閉是否記錄日志。rpc
以上問題還未完全解決,學習 gRPC 感覺有些吃力...
大家有沒有可以推薦的學習資源?目前在看 grpc-gateway 。
- Go - 使用 sync.WaitGroup 來實作并發操作
- Go - 使用 sync.Map 解決 map 并發安全問題
- Go - 基于逃逸分析來提升程式性能
- Go - 使用 sync.Pool 來減少 GC 壓力
- Go - 使用 options 設計模式
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CN3EDMzITO4MTMtAzNxQTM4MDNxIjM4ADMyAjMtADN4kDOz8CX4ADMyAjMvwFM0gTO4MzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
作者:新亮筆記(關注公衆号,可申請添加微信好友)
出處:https://www.cnblogs.com/xinliangcoder
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。