一個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
相關文章
- 反正舉例教你規範寫程式碼
- 開源一個程式碼規範檢測工具
- gRPC-Go 和 Java 的一次 HelloWorld(十)RPCGoJava
- pegasusWMS的jupyter範例
- CSS匹配第一個li元素程式碼例項CSS
- KunlunBase 功能體驗範例
- PhpSpreadsheet 匯出excel範例PHPExcel
- 001.01 一般網頁爬蟲處理範例網頁爬蟲
- gRPC-go原始碼(2):ClientConnRPCGo原始碼client
- grpc-go使用教程之helloworldRPCGo
- 002.03 Tkinter 星空漫遊範例
- 類别範本 單例模板單例
- Shell中的${}、##和%%使用範例
- gRPC-go 入門(1):Hello WorldRPCGo
- [譯]Flutter 響應式程式設計:Steams 和 BLoC 實踐範例Flutter程式設計BloC
- 個人總結的一些寫JS程式碼的基本規範JS
- frida 建立一個ArrayList例項
- 題目:設計一個類,我們只能生成該類的一個例項。 程式碼如下
- VC++視覺化程式設計第一個程式設計例項出錯C++視覺化程式設計
- Cookie 的特徵與範圍用例Cookie特徵
- 一些常用的程式碼規範
- flutter如何統一程式碼規範Flutter
- 【GoLang 那點事】gRPC-Go 和 Java 的一次 HelloWorld(十)GolangRPCJava
- 資料採集卡,Labjack 系列數採的 Labview 程式設計範例View程式設計
- gRPC-go原始碼(1):連線管理RPCGo原始碼
- 支付寶小程式面向個人開放了!我將以一個 Demo 為例講解整個流程。
- 002.02 Tkinter 圖形介面之文字範例
- PHP 規範 - Symfony 程式碼規範PHP
- 一個例項中,多個synchronized方法的呼叫synchronized
- python 單一程式例項 實現Python
- 一個pyspark 開發練習例項Spark
- 3.1.4 準備啟動一個例項
- 分享一個SQLite 效能優化例項SQLite優化
- 一個馬爾科夫鏈例項馬爾科夫
- 推薦幾個大廠的前端程式碼規範,你也能寫出詩一樣的程式碼!前端
- matlab 從某個範圍內隨機取出一個整數Matlab隨機
- oracle一個listener偵聽多個例項的配置Oracle
- 統一規範化程式碼的命名風格
- Eslint-程式碼規範請了解一下EsLint