国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁 > news >正文

做商城網(wǎng)站需要什么資質(zhì)海南網(wǎng)站制作

做商城網(wǎng)站需要什么資質(zhì),海南網(wǎng)站制作,網(wǎng)站建設(shè)全包 廣州,自己怎么做網(wǎng)站賣車gone是可以高效開發(fā)Web服務(wù)的Golang依賴注入框架 github地址:https://github.com/gone-io/gone 文檔地址:https://goner.fun/zh/ 文章目錄 使用gRPC通信編寫proto文件,生成golang代碼編寫服務(wù)端代碼注冊客戶端編寫配置文件測試總結(jié) 使用gRPC通…

gone是可以高效開發(fā)Web服務(wù)的Golang依賴注入框架
github地址:https://github.com/gone-io/gone
文檔地址:https://goner.fun/zh/

文章目錄

  • 使用gRPC通信
    • 編寫proto文件,生成golang代碼
    • 編寫服務(wù)端代碼
    • 注冊客戶端
    • 編寫配置文件
    • 測試
    • 總結(jié)

使用gRPC通信

首先創(chuàng)建一個grpc目錄,在這個目錄中初始化一個golang mod:

mkdir grpc
cd grpc
go mod init grpc

編寫proto文件,生成golang代碼

  • 編寫協(xié)議文件
    定義一個簡單的Hello服務(wù),包含一個Say方法
    文件名:proto/hello.proto
syntax = "proto3";option go_package="/proto";package Business;service Hello {rpc Say (SayRequest) returns (SayResponse);
}message SayResponse {string Message = 1;
}message SayRequest {string Name = 1;
}
  • 生成golang代碼
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
proto/hello.proto

其中,protoc的安裝參考Protocol Buffer 編譯器安裝

編寫服務(wù)端代碼

文件名:server/main.go

package mainimport ("context""github.com/gone-io/gone""github.com/gone-io/gone/goner""github.com/gone-io/gone/goner/cmux""google.golang.org/grpc""grpc/proto""log"
)type server struct {gone.Flagproto.UnimplementedHelloServer // 嵌入UnimplementedHelloServer
}// 重載協(xié)議中定義的服務(wù)
func (s *server) Say(ctx context.Context, in *proto.SayRequest) (*proto.SayResponse, error) {log.Printf("Received: %v", in.GetName())return &proto.SayResponse{Message: "Hello " + in.GetName()}, nil
}// 實現(xiàn) gone_grpc.Service接口的RegisterGrpcServer方法,該方法在服務(wù)器啟動時會被自動調(diào)用
func (s *server) RegisterGrpcServer(server *grpc.Server) {proto.RegisterHelloServer(server, s)
}func main() {gone.Prepare(func(cemetery gone.Cemetery) error {_ = cmux.Priest(cemetery) // 注冊cmux,可以讓gRPC服務(wù) 和 HTTP服務(wù)共享一個端口_ = goner.GrpcServerPriest(cemetery) // 注冊gRPC服務(wù)器cemetery.Bury(&server{}) // 注冊gRPC服務(wù)return nil}).// 啟動服務(wù)Serve()
}

注冊客戶端

文件名:client/main.go

package mainimport ("context""fmt""github.com/gone-io/gone""github.com/gone-io/gone/goner""google.golang.org/grpc""grpc/proto""log"
)type helloClient struct {gone.Flagproto.HelloClient // 嵌入HelloClienthost string `gone:"config,server.host"`port string `gone:"config,server.port"`
}// 實現(xiàn) gone_grpc.Client接口的Address方法,該方法在客戶端啟動時會被自動調(diào)用
// 該方法的作用是告訴客戶端gRPC服務(wù)的地址
func (c *helloClient) Address() string {return fmt.Sprintf("%s:%s", c.host, c.port)
}// 實現(xiàn) gone_grpc.Client接口的Stub方法,該方法在客戶端啟動時會被自動調(diào)用
// 在該方法中,完成 HelloClient的初始化
func (c *helloClient) Stub(conn *grpc.ClientConn) {c.HelloClient = proto.NewHelloClient(conn)
}func main() {gone.Prepare(func(cemetery gone.Cemetery) error {_ = goner.GrpcClientPriest(cemetery) // 注冊gRPC客戶端注冊器Gonercemetery.Bury(&helloClient{}) //注冊我們的實現(xiàn)的helloClientreturn nil}).Run(func(in struct {hello *helloClient `gone:"*"`// 在Run方法的參數(shù)中,注入 helloClient}) {// 調(diào)用Say方法,給服務(wù)段發(fā)送消息say, err := in.hello.Say(context.Background(), &proto.SayRequest{Name: "gone"})if err != nil {log.Printf("er:%v", err)return}log.Printf("say result: %s", say.Message)})
}

編寫配置文件

文件名:config/default.properties

# 設(shè)置grpc服務(wù)的端口和host
server.port=9001
server.host=127.0.0.1# 設(shè)置客戶端使用的grpc服務(wù)端口和host
server.grpc.port=${server.port}
server.grpc.host=${server.host}

測試

  • 先運(yùn)行服務(wù)端:
go run server/main.go

程序等待請求,屏幕打印內(nèi)容:

2024-06-19 22:02:41.971|INFO|/Users/jim/works/gone-io/gone/goner/grpc/server.go:84||Register gRPC service *main.server
2024-06-19 22:02:41.971|INFO|/Users/jim/works/gone-io/gone/goner/grpc/server.go:88||gRPC server now listen at 127.0.0.1:9001
  • 然后,另外開窗口啟動客戶端:
go run client/main.go

程序執(zhí)行完退出,屏幕打印內(nèi)容如下:

2024-06-19 22:06:20.713|INFO|/Users/jim/works/gone-io/gone/goner/grpc/client.go:59||register gRPC client *main.helloClient on address 127.0.0.1:90012024/06/19 22:06:20 say result: Hello gone
  • 回到服務(wù)端窗口,可以看到服務(wù)器接收到請求,新打印一行日志:
2024/06/19 22:06:08 Received: gone

總結(jié)

在Gone中使用gRPC,需要完成以下幾步:

  • 編寫服務(wù)端

    1. 編寫服務(wù)端Goner,匿名嵌入proto協(xié)議生成代碼的 默認(rèn)實現(xiàn)
    2. 重載proto文件中定義的接口方法,編寫提供服務(wù)的具體業(yè)務(wù)邏輯
    3. 實現(xiàn)gone_grpc.Service接口的RegisterGrpcServer方法,在該方法中完成服務(wù)注冊
    4. 將 服務(wù)端Goner 注冊到 Gone框架
    5. 啟動服務(wù)
  • 編寫客戶端

    1. 編寫客戶端Goner,嵌入proto協(xié)議生成代碼的客戶端接口
    2. 實現(xiàn)gone_grpc.Client接口的AddressStub方法,Address方法返回服務(wù)端地址,Stub初始化客服端接口
    3. 將 客戶端Goner 注冊到 Gone框架
    4. 啟動客戶端,調(diào)用客服端接口方法

本文的代碼開源在: https://github.com/gone-io/gone/tree/main/example/grpc

http://aloenet.com.cn/news/27850.html

相關(guān)文章:

  • 做網(wǎng)站和做推廣有什么區(qū)別站內(nèi)推廣
  • 新鄉(xiāng)網(wǎng)站建設(shè)哪家好seo包年服務(wù)
  • 網(wǎng)站備案要求北京seo薪資
  • 西安是哪個省屬于哪個省專業(yè)網(wǎng)站推廣優(yōu)化
  • 做網(wǎng)站的屬于什么重慶seo排名優(yōu)化
  • 個人可以做電影網(wǎng)站嗎seo診斷工具有哪些
  • 網(wǎng)站建設(shè)設(shè)計 飛沐中小企業(yè)網(wǎng)站制作
  • 牡丹江百度seo排名優(yōu)化公司推薦
  • 網(wǎng)站數(shù)據(jù)庫怎么做同步今日重要新聞
  • 輕松做網(wǎng)站江蘇seo平臺
  • 企業(yè)做網(wǎng)站營銷的四大途徑東莞推廣公司
  • 八喜網(wǎng)站建設(shè)微平臺推廣
  • 南京網(wǎng)站制作搭建app推廣怎么做
  • 網(wǎng)架加工廠家德州網(wǎng)站建設(shè)優(yōu)化
  • wordpress做論壇網(wǎng)站app推廣方法
  • ninaszjs wordpress電腦系統(tǒng)優(yōu)化軟件排行榜
  • 網(wǎng)站開發(fā)個人總結(jié)市場調(diào)研與分析
  • 商丘專業(yè)做網(wǎng)站seo外鏈建設(shè)方法
  • 公司網(wǎng)站模板內(nèi)容seo值怎么提高
  • 網(wǎng)上那些彩票網(wǎng)站可以自己做嗎最近實時熱點(diǎn)新聞事件
  • 鄭州網(wǎng)站搭建的公司網(wǎng)絡(luò)營銷方案的制定
  • 美國網(wǎng)站后綴搜索引擎優(yōu)化的方法
  • 中國建設(shè)網(wǎng)站企業(yè)網(wǎng)上銀行業(yè)務(wù)功能南京百度seo代理
  • php網(wǎng)站的客服窗口怎么做關(guān)鍵詞推廣怎么做
  • 網(wǎng)站的專題圖怎么做yande搜索引擎官網(wǎng)入口
  • 上海品牌網(wǎng)站建設(shè)seo網(wǎng)站診斷流程
  • 計算機(jī)做網(wǎng)站開發(fā)需要什么證書企業(yè)營銷策劃書
  • 對于建設(shè)高效的政府門戶網(wǎng)站的建議重慶網(wǎng)站建設(shè)
  • 農(nóng)家樂網(wǎng)站模板汽車網(wǎng)絡(luò)營銷策劃方案
  • 如何優(yōu)化公司網(wǎng)站cilimao磁力貓最新版地址