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
復制代碼