c++ grpc,一個gRPC-go范例程序

 2023-10-08 阅读 28 评论 0

摘要:grpc-go的介紹: The Go implementation of gRPC: A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. 復制代碼 github地址 c++ grpc、https://github.com/grpc/grpc-go 注意看readme中的安裝方式 go get -u google.golang.o

grpc-go的介紹:

The Go implementation of gRPC: A high performance, open source, general RPC framework that puts mobile and HTTP/2 first.
復制代碼

github地址

c++ grpc、https://github.com/grpc/grpc-go

注意看readme中的安裝方式 go get -u google.golang.org/grpc,此處可能需要全局科學上網。

google提供的范例

golang grpc?https://github.com/grpc/grpc-go/tree/master/examples

寫個測試程序試試,完整的代碼見https://github.com/changjixiong/goNotes/tree/master/grpcnotes 。

創建子目錄hello,在目錄hello中創建一個hello.proto文件,對著exmaples中的helloworld依葫蘆畫瓢:

syntax = "proto3";package hello;service Hello {rpc SayHello (HelloRequest) returns (HelloReply) {}
}message HelloRequest {int32 num = 1;
}message HelloReply {string message = 1;
}
復制代碼

go語言開發桌面程序,在目錄grpcnotes下執行protoc -I hello/ hello/hello.proto --go_out=plugins=grpc:hello

生成hello.pb.go文件

按同樣的步驟在創建一個world。

go 頁面開發、創建子目錄echo,在目錄echo中創建一個echo.proto文件,對著exmaples/route_guide/routeguide/route_guide.proto文件抄一個stream模式的定義:

syntax = "proto3";package echo;service Echo {rpc SayEcho (EchoRequest) returns (EchoReply) {}rpc SayEchoS(stream EchoRequest) returns (stream EchoReply) {}
}message EchoRequest {int32 num = 1;
}message EchoReply {string message = 1;
}
復制代碼

在目錄grpcnotes下執行protoc -I echo/ echo/echo.proto --go_out=plugins=grpc:echo

生成echo.pb.go文件。

硬件編程go,按照exmaples/helloworld/greeter_server/main.go的例子抄一個,由于這里有3個protobuf對象,所以代碼略有不同:

s := grpc.NewServer(grpc.KeepaliveParams(keepalive.ServerParameters{}),grpc.MaxConcurrentStreams(10000))pb.RegisterHelloServer(s, &serverHello{})pb2.RegisterWorldServer(s, &serverWorld{})pb3.RegisterEchoServer(s, &serverEcho{})// Register reflection service on gRPC server.reflection.Register(s)
復制代碼

client參考exmaples/helloworld/greeter_client/main.go,增加了并發調用,參數風格參考ab測試

編譯服務器程序命名為grpcserver,編譯客戶端程序命名為grpcclient。

編程 go?運行 ./grpcserver

運行 ./grpcclient -c 1000 -n 100000

輸出

550 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
400 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
500 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
50 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
900 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
150 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
300 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
200 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
650 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
250 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
750 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
600 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
800 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
350 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
0 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
850 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
950 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
450 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
100 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
700 sendokNum: 100 recvokNum 100 sendErrNum: 0 recvErrNum: 0 emptyNum: 0
cost: 3.96848528s
復制代碼

轉載于:https://juejin.im/post/5a59e727518825734107e130

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/130777.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息