網(wǎng)站開發(fā)視頻壓縮上傳seo資源
官方網(wǎng)址:https://go-zero.dev/docs/tasks/cli/grpc-demo
項目結(jié)構(gòu)
demo包
兩個文件均為protoc-gen-go-grpc自動生成
構(gòu)成一個完整的 gRPC 服務(wù)的定義和實現(xiàn)
democlient包
demo.go goctl生成的客戶端代碼
- Request 和 Response 別名: 定義了 Request 和 Response 兩個別名,實際上是從 demo 包中導(dǎo)入的對應(yīng)的消息類型。
- Demo 接口: 定義了一個 Demo 接口,其中包含了調(diào)用 gRPC 服務(wù)中 Ping 方法的方法聲明。
- defaultDemo 結(jié)構(gòu)體: 實現(xiàn)了 Demo 接口,包含一個 zrpc.Client 類型的字段,用于與 gRPC 服務(wù)建立連接。
- NewDemo 函數(shù): 用于創(chuàng)建并返回 Demo 接口的實例,需要傳入一個 zrpc.Client 類型的參數(shù),用于建立連接。
- Ping 方法: 是 Demo 接口中的實際方法,通過 defaultDemo 結(jié)構(gòu)體的實例調(diào)用 gRPC 服務(wù)中的 Ping 方法。
etc包
demo.yaml
- Name:demo.rpc 服務(wù)名稱
- ListenOn:0.0.0.0:8080 指定服務(wù)監(jiān)聽的地址和端口
- Mode:dev 服務(wù)運行在開發(fā)模式 (dev)
internal包
config/config.go
zrpc結(jié)構(gòu)體源碼如下
logic/pinglogic.go
- **PingLogic 結(jié)構(gòu)體:**包含了處理 gRPC 請求的上下文、服務(wù)上下文以及日志記錄器
- NewPingLogic 函數(shù): 創(chuàng)建并返回 PingLogic 結(jié)構(gòu)體的實例,初始化了上下文和服務(wù)上下文,并通過 logx.WithContext 方法創(chuàng)建了與上下文關(guān)聯(lián)的日志記錄器
- Ping 方法: 是處理 gRPC 請求的具體邏輯方法。接收一個 demo.Request 類型的參數(shù) in,并返回一個 *demo.Response 類型和一個 error
server/demoserver.go 由goctl生成的grpc服務(wù)端代碼
- DemoServer 結(jié)構(gòu)體: 實現(xiàn) demo.UnimplementedDemoServer 接口,表示該結(jié)構(gòu)體用于處理 gRPC 請求,包含了一個 svcCtx 字段–指向 svc.ServiceContext 結(jié)構(gòu)體的指針
- NewDemoServer 函數(shù): 用于創(chuàng)建并返回 DemoServer 結(jié)構(gòu)體的實例
- Ping 方法: 是 DemoServer 處理 gRPC 請求的具體方法。它接收一個上下文 ctx 和一個 demo.Request 類型的參數(shù) in,并返回一個 *demo.Response 類型和一個 error。在這個方法中,它創(chuàng)建了一個 logic.NewPingLogic 實例,然后調(diào)用了 l.Ping(in) 方法,將請求交由具體的業(yè)務(wù)邏輯處理。
svc/servicecontext.go
創(chuàng)建返回svc結(jié)構(gòu)體實例
demo.proto
用于生成不同語言的gRPC代碼
- syntax = “proto3”;: 指定使用 protobuf 3 語法
- package demo;: 指定生成的 Go 代碼的包路徑
- option go_package=“./demo”;: 指定生成的 Go 代碼的包路徑
- message Request: 定義了一個消息類型 Request,其中包含一個字符串字段 ping
- message Response: 定義了一個消息類型 Response,其中包含一個字符串字段 pong
- service Demo: 定義了一個服務(wù)接口 Demo,包含一個 Ping 方法,該方法接收 Request 消息作為參數(shù),并返回 Response 消息
— string pong = 1; 不代表值為1,代表他的編號為1(protobuf語法
demo.go
- 加載配置文件: 使用 flag 包解析命令行參數(shù),獲取配置文件路徑,并通過 conf.MustLoad 加載配置信息到結(jié)構(gòu)體 c 中
- 創(chuàng)建服務(wù)上下文: 使用 svc.NewServiceContext 創(chuàng)建服務(wù)上下文,將配置信息傳遞給服務(wù)上下文
- 創(chuàng)建 gRPC 服務(wù): 使用 zrpc.MustNewServer 創(chuàng)建 gRPC 服務(wù),同時注冊了 Demo 服務(wù)。如果是開發(fā)或測試模式,還注冊了 gRPC 服務(wù)反射服務(wù),以方便 gRPC 工具的使用
- 啟動 gRPC 服務(wù): 使用 s.Start() 啟動 gRPC 服務(wù),監(jiān)聽指定的地址