本文通過乙個簡單的示例,了解如何在go中使用grpc。
使用命令列安裝
* 使用以下命令安裝grpc:
$ go get google.golang.org/grpc
獲取編譯器外掛程式protoc-gen-go
,並將其安裝在$gobin
路徑中,預設為$gopath/bin
。
5)必須設定好$path
環境變數,協議編譯器protoc才能找到它。將此命令$ export path=$path:$gopath/bin
加入到~/.profile
檔案的最後,儲存,用source ~/.profile
使檔案生效。
通過go get google.golang.org/grpc
獲取的grpc**中還包含示例。這個例項可以在以下路徑中找到:
$gopath/src/google.golang.org/grpc/examples
。
切換到示例目錄:
$ cd
$gopath/src/google.golang.org/grpc/examples/helloworld
在.proto
檔案中定義了grpc服務,用於生成相應的.pb.go
檔案。該.pb.go
檔案是通過使用協議編譯器protoc
編譯.proto
檔案生成的。
在樣例中,該helloworld.pb.go
檔案已經被生成(通過編譯helloworld.proto
),並且可以在這個目錄中找到:
$gopath/src/google.golang
.org/grpc/examples/helloworld/helloworld
此helloworld.pb.go
檔案包含:
* 生成的客戶端和伺服器**。
* 用於填充,序列化和檢索我們hellorequest和helloreply訊息型別的**。
使用go run
命令和執行伺服器和客戶端**。
在examples目錄中:
執行:$ go run greeter_server/main.go
開啟另乙個的終端,到相同的目錄下:
執行:$ go run greeter_client/main.go
你會看到greeting: hello world客戶端的輸出。
恭喜!您剛剛使用grpc執行了客戶端 - 伺服器應用程式。
現在我們來看看如何使用伺服器上的乙個額外的方法來更新應用程式,以供客戶端呼叫。我們的grpc服務是使用protocol buffer
定義的; 您可以在.proto
檔案中找到關於定義服務的更多資訊。現在,您需要知道的是,伺服器和客戶端「stub」都有乙個sayhello
的rpc方法,該方法從客戶端獲取hellorequest
引數並從伺服器返回乙個helloreply
引數,該方法的定義如下:
// the greeting service definition.
service greeter
}// the request message containing the user's name.
message hellorequest
// the response message containing the greetings
message helloreply
更新這個方法,使greeter服務有兩種方法。確保在同乙個例子中修改,如$gopath/src/google.golang.org/grpc/examples/helloworld
目錄
// the greeting service definition.
service greeter
// sends another greeting
rpc sayhelloagain (hellorequest) returns (helloreply) {}
}// the request message containing the user's name.
message hellorequest
// the response message containing the greetings
message helloreply
接下來,我們需要更新應用程式使用的grpc**,以便能使用定義的新服務。在($gopath/src/google.golang.org/grpc/examples/helloworld
)這個目錄,執行以下命令,將重新生成helloworld.pb.go:
$ protoc -i helloworld/ helloworld/helloworld.proto --go_out=plugins=grpc:helloworld
func (s *server) sayhelloagain(ctx context.context, in *pb.hellorequest) (*pb.helloreply, error) , nil
}
編輯greeter_client/main.go
將以下**新增到主函式的最後。
r, err = c.sayhelloagain(context.background(), &pb.hellorequest)
if err != nil
log.printf("greeting: %s", r.message)
$ go run greeter_server/main.go
$ go run greeter_client/main.go
$ go run greeter_client/main.go
greeting: hello world
greeting: hello again world
參考文章:
官方英文文件:
官方中文文件:
go語言 grpc入門
go get google.golang.org grpc1.編寫.proto描述檔案 hello.proto syntax proto3 package proto message string service helloservice2.使用protoc工具生成相應的go 生成的 與porto描...
GRPC基礎入門
專案中要使用rpc協議框架來實現兩個系統之間的介面呼叫。a系統呼叫b系統的相應介面,因為考慮到http請求會包含更多冗餘資訊,造成請求過大,因此選用了rpc眾多框架中的grpc。grpc是google開源的rpc框架,目前版本1.0.0,看jar包引入包括netty與okhttp,同時序列化中使用的...
gRPC入門小結
首先要知道rpc是什麼 remote procedure call的簡稱,翻譯成中文就是遠端過程呼叫。rpc主要是為了解決以下倆個問題 grpc 一開始由 google 開發,是一款語言中立 平台中立 開源的遠端過程呼叫 rpc 系統,g有global的意思 在grpc裡客戶端應用可以像呼叫本地物件...