目錄
- 前言
- helloworld.proto
- 小思考
- 小結
- 推薦閱讀
前言
ProtoBuf 是什么?
ProtoBuf 是一套介面描述語言(IDL),通俗的講是一種資料表達方式,也可以稱為資料交換格式,
我們常用的資料格式有 JSON 和 XML,為什么使用 ProtoBuf ?是因為它的傳輸快,為什么傳輸快?大家可以找下資料,使用 .proto 檔案進行描述要序列化的資料結構,然后將寫好 .proto 檔案使用 protoc 就可以很容易編譯成眾多計算機語言的介面代碼,
gRPC 是什么?
gRPC 是開源的 RPC 框架,已支持主流的計算機語言,可以通過 ProtoBuf 進行定義介面,可以基于 ProtoBuf 進行資料傳輸,
兩者雖然是一家,但是分別解決不同的問題,可以配合使用,也可以分開,
看一下的 gRPC helloworld 的 proto 檔案是如何定義的?
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方法能否也同時支持HTTP呼叫?例如:SayHello 方法,既支持 gRPC 呼叫,也支持 HTTP 呼叫,同時支持protoc生成代碼時,同時也生成Swagger介面檔案, -
定義的入參能否支持引數驗證?例如:name 長度不能大于 20 個字符,
-
定義的
serviceGreeter 服務能否支持攔截器?例如:該服務下的所有方法需要進行登錄令牌驗證, -
定義的
rpcSayHello 方法能夠支持攔截器?例如:當前方法支持開啟和關閉是否記錄日志,
小結
以上問題還未完全解決,學習 gRPC 感覺有些吃力...
大家有沒有可以推薦的學習資源?目前在看 grpc-gateway ,
推薦閱讀
- Go - 使用 sync.WaitGroup 來實作并發操作
- Go - 使用 sync.Map 解決 map 并發安全問題
- Go - 基于逃逸分析來提升程式性能
- Go - 使用 sync.Pool 來減少 GC 壓力
- Go - 使用 options 設計模式

作者:新亮筆記(關注公眾號,可申請添加微信好友)
出處:https://www.cnblogs.com/xinliangcoder
本文著作權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/373738.html
標籤:Go
