一個gRPC-go範常式序
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。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.96848528s364 次點擊