一個gRPC-go範例程式
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
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Linux 中 sort 命令的14個有用的範例(一)Linux
- ls 命令的 20 個實用範例
- 反正舉例教你規範寫程式碼
- 開源一個程式碼規範檢測工具
- 【限制程式只開啟一個例項】
- gRPC-Go 和 Java 的一次 HelloWorld(十)RPCGoJava
- 雲協議範例一 P2P協議
- 覆盤的小小幫手——簡單程式設計,進階範例 通達信基礎範例程式設計
- Python正規表示式的七個使用範例Python
- phptoken驗證範例PHP
- jdbc連rac範例JDBC
- 指令碼範例(轉)指令碼
- 單例模式 - 只有一個例項單例模式
- Web前端——CSS的命名規範和範例Web前端CSS
- grpc-go使用教程之helloworldRPCGo
- CSS匹配第一個li元素程式碼例項CSS
- css匹配最後一個li元素程式碼例項CSS
- jQuery獲取當前元素的上一個或者下一個元素程式碼例項jQuery
- 使用jQuery刪除一個元素節點程式碼例項jQuery
- js刪除字串中最後一個字元程式碼例項JS字串字元
- javascript實現複製一個陣列程式碼例項JavaScript陣列
- 獲取當前元素下一個元素程式碼例項
- 應用程式每次只能執行一個例項(C#)C#
- 僅允許程式一個例項執行VC6
- gRPC-go原始碼(2):ClientConnRPCGo原始碼client
- gRPC-go 入門(1):Hello WorldRPCGo
- C++的一個簡單的控制程式碼類别範本C++
- 類别範本 單例模板單例
- Glide範例原始碼分析IDE原始碼
- 批量move tablespace 指令碼範例指令碼
- sqlldr 匯入資料範例SQL
- 【GoLang 那點事】gRPC-Go 和 Java 的一次 HelloWorld(十)GolangRPCJava
- flutter如何統一程式碼規範Flutter
- 一些常用的程式碼規範
- iOS 開發(一) 程式碼規範篇iOS
- css實現一個文字兩種顏色程式碼例項CSS
- 在ul的最後插入一個li元素程式碼例項
- 程式設計師築基之路——如何寫好一個單例程式設計師單例