Qt6.5 grpc組件使用 + golang grpc server示例詳解
1. 資料
1) Protobuf 開(kāi)發(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轉(zhuǎn)成Qt 庫(kù) 的 grpc客戶(hù)端 ii. qtprotobufgen.exe 將proto轉(zhuǎn)成帶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客戶(hù)端
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) 客戶(hù)端調(diào)用代碼
#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服務(wù)端
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)建一個(gè)main.go,調(diào)用函數(shù)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 幫助文檔可知道, 現(xiàn)在Qt6.5只封裝支持了客戶(hù)端,服務(wù)端暫未支持;
到此這篇關(guān)于Qt6.5 grpc組件使用 + golang grpc server示例的文章就介紹到這了,更多相關(guān) golang grpc server內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
go如何優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)
這篇文章主要為大家介紹了go優(yōu)雅關(guān)閉Graceful?Shutdown服務(wù)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例
這篇文章主要為大家介紹了使用golang如何優(yōu)雅的關(guān)機(jī)或重啟操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04Go語(yǔ)言中的基礎(chǔ)數(shù)據(jù)類(lèi)型使用實(shí)例
這篇文章主要為大家介紹了Go中的基礎(chǔ)數(shù)據(jù)類(lèi)型使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Golang算法之田忌賽馬問(wèn)題實(shí)現(xiàn)方法分析
這篇文章主要介紹了Golang算法之田忌賽馬問(wèn)題實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了基于Go語(yǔ)言的田忌賽馬問(wèn)題原理與算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02golang socket斷點(diǎn)續(xù)傳大文件的實(shí)現(xiàn)方法
今天小編就為大家分享一篇golang socket斷點(diǎn)續(xù)傳大文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Golang 實(shí)現(xiàn) Redis系列(六)如何實(shí)現(xiàn) pipeline 模式的 redis 客戶(hù)端
pipeline 模式的 redis 客戶(hù)端需要有兩個(gè)后臺(tái)協(xié)程負(fù)責(zé) tcp 通信,調(diào)用方通過(guò) channel 向后臺(tái)協(xié)程發(fā)送指令,并阻塞等待直到收到響應(yīng),本文是使用 golang 實(shí)現(xiàn) redis 系列的第六篇, 將介紹如何實(shí)現(xiàn)一個(gè) Pipeline 模式的 Redis 客戶(hù)端。2021-07-07Golang實(shí)踐之Error創(chuàng)建和處理詳解
在 C#、Java 等語(yǔ)言中常常使用 try...catch的方式來(lái)捕獲異常,但是在Golang 對(duì)于錯(cuò)誤處理有不同的方式,像網(wǎng)上也有很多對(duì) error 處理的最佳實(shí)踐的文章,其中很多其實(shí)就是對(duì) error 的統(tǒng)一封裝,使用規(guī)范進(jìn)行約束,本文主要是記錄自己對(duì)處理 Error 的一些認(rèn)識(shí)和學(xué)習(xí)2023-09-09Golang?Mutex錯(cuò)過(guò)會(huì)后悔的重要知識(shí)點(diǎn)分享
互斥鎖?Mutex?是并發(fā)控制的一個(gè)基本手段,是為了避免并發(fā)競(jìng)爭(zhēng)建立的并發(fā)控制機(jī)制,本文主要為大家整理了一些Mutex的相關(guān)知識(shí)點(diǎn),希望對(duì)大家有所幫助2023-07-07