Qt6.5 grpc組件使用 + golang grpc server示例詳解
1. 資料
1) Protobuf 開發(fā)文檔
2) protobuf安裝指南
https://grpc.io/docs/protoc-installation/
3) protoc 下載
https://github.com/protocolbuffers/protobuf/releases/tag/v23.1
2. Qt grpc 組件 & 工具
1) Qt6.5 安裝目錄下 xx\Qt\6.5.0\mingw_64\bin
i. qtgrpcgen.exe 將proto轉成Qt 庫 的 grpc客戶端 ii. qtprotobufgen.exe 將proto轉成帶Qt封裝的 的 protobuf接口
2) 指令使用
helloworld.proto 文件
syntax = "proto3"; package helloworld; message HelloRequest { string name = 1; } message HelloResponse { string message = 1; } service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse) {} } option go_package = "proto/helloworld";
1) 生成Qt封裝的protobuf接口
protoc.exe --plugin=protoc-gen-qtprotobuf=E:\qt599\Qt\6.5.0\mingw_64\bin\qtprotobufgen.exe -I “D:/workspace/Qt/grpc_test/common” --qtprotobuf_out=“D:/workspace/Qt/grpc_test/common” “D:/workspace/Qt/grpc_test/common/helloworld.proto”
2) 生成Qt grpc客戶端
protoc --plugin=protoc-gen-qtgrpc=E:/qt599/Qt/6.5.0/mingw_64/bin/qtgrpcgen.exe --qtgrpc_out=“D:/workspace/Qt/grpc_test/common” -I “D:/workspace/Qt/grpc_test/common” “D:/workspace/Qt/grpc_test/common/helloworld.proto”
3) 客戶端調用代碼
#include <QCoreApplication> #include <QGrpcInsecureChannelCredentials> #include "helloworld_client.grpc.qpb.h" #include <QGrpcHttp2Channel> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); helloworld::HelloService::Client client; auto channel = std::shared_ptr<QAbstractGrpcChannel>(new QGrpcHttp2Channel( QUrl("http://localhost:50051", QUrl::StrictMode), QGrpcInsecureChannelCredentials() | QGrpcInsecureCallCredentials())); client.attachChannel(channel); helloworld::HelloRequest req; helloworld::HelloResponse rep; req.setName("gray"); QGrpcStatus status = client.SayHello(req, &rep); qDebug() << "Request Result: " << status.code() << status.message(); qDebug() << "REP : " << rep.message(); return a.exec(); }
3. Golang服務端
1) 生成golang 帶grpc接口文件
protoc.exe -I D:/workspace/Qt/grpc_test/common --proto_path=“D:/workspace/grpc/protoc/include/google/protobuf” --plugin=protoc-gen-go=D:/workspace/grpc/protoc/bin/protoc-gen-go.exe --go_out=plugins=grpc:D:/workspace/Qt/grpc_test/common D:/workspace/Qt/grpc_test/common/helloworld.proto
2) 示例代碼
再創(chuàng)建一個main.go,調用函數RunServer即可
package proto import ( context "context" "flag" "fmt" "log" "net" grpc "google.golang.org/grpc" ) var ( port = flag.Int("port", 50051, "The server port") ) type Server struct { HelloServiceServer } // SayHello implements helloworld.GreeterServer func (s *Server) SayHello(ctx context.Context, in *HelloRequest) (*HelloResponse, error) { fmt.Printf("Received: %v\n", in.GetName()) return &HelloResponse{Message: "Hello " + in.GetName()}, nil } func RunServer() error { flag.Parse() lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port)) if err != nil { log.Fatalf("failed to listen: %v", err) } s := grpc.NewServer() RegisterHelloServiceServer(s, &Server{}) log.Printf("server listening at %v", lis.Addr()) if err := s.Serve(lis); err != nil { log.Fatalf("failed to serve: %v", err) } return err }
4. 介紹一下Qt6.5支持哪些grpc功能
由Qt6.5 幫助文檔可知道, 現在Qt6.5只封裝支持了客戶端,服務端暫未支持;
到此這篇關于Qt6.5 grpc組件使用 + golang grpc server示例的文章就介紹到這了,更多相關 golang grpc server內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
go如何優(yōu)雅關閉Graceful?Shutdown服務
這篇文章主要為大家介紹了go優(yōu)雅關閉Graceful?Shutdown服務詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05Golang 實現 Redis系列(六)如何實現 pipeline 模式的 redis 客戶端
pipeline 模式的 redis 客戶端需要有兩個后臺協程負責 tcp 通信,調用方通過 channel 向后臺協程發(fā)送指令,并阻塞等待直到收到響應,本文是使用 golang 實現 redis 系列的第六篇, 將介紹如何實現一個 Pipeline 模式的 Redis 客戶端。2021-07-07