一个gRPC-go范例程序

changjixiong · · 1729 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

grpc-go的介绍: The Go implementation of gRPC: A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. github地址 https://github.com/grpc/grpc-go 注意看readme中的安装方式 go get -u google.golang.org/grpc,此处可能需要全局科学上网。 google提供的范例 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; } 在目录grpcnotes下执行protoc -I hello/ hello/hello.proto --go_out=plugins=grpc:hello 生成hello.pb.go文件 按同样的步骤在创建一个world。 创建子目录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文件。 按照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。 运行 ./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

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1729 次点击  
加入收藏 微博
上一篇:go安装
1 回复  |  直到 2019-05-09 12:27:58
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传