gRPC golang 初步接觸

2021-09-25 07:43:37 字數 3166 閱讀 1019

grpc使用protocol buffers作為 idl(inte***ce definition language), 提供一種跨平台,跨語言的rpc(遠端過程呼叫)機制,本文通過示例程式介紹grpc基本使用。

接著安裝 protoc的go外掛程式:

$ go get -u github.com/golang/protobuf/protoc-gen-go
protoc-gen-go 編譯器外掛程式安裝在$gobin,變數定義為 $gopath/bin,在$path環境變數中必須存在 protocol ,protoc相關命令。

$ export path=$path:$gopath/bin

$ go get google.golang.org/grpc 

$ go get github.com/grpc/grpc

#切換到示例**目錄中

$ cd $gopath/src/google.golang.org/grpc/examples

.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包含以下內容:

使用 go run 指令執行。

執行服務端:

$ go run greeter_server/main.go
執行客戶端(新開terminal):

$ go run greeter_client/main.go
若列印 greeting: hello world,表示基於client-server的 grpc 運用執行成功。

目的:服務端(server)增加乙個新的方法(sayhelloagain)供客戶端(client)呼叫。grpc服務使 protocol定義;在這個 位址 和這個 位址 能找到定義.proto檔案的更多資訊。現在,你只需要知道服務端和客戶端"stub"同時存在乙個sayhello方法,該方法接受從客戶端hellorequest型別引數並且由服務端返回helloreply型別結果,**如下:

//  greeting 服務定義.

service greeter

}// request 訊息體包含 user's name.

message hellorequest

// response 訊息提包含 greetings

message helloreply

greeter增加乙個sayhelloagain方法,確保當前工作目錄為$gopath/src/google.golang.org/grpc/examples/helloworld。

修改helloworld/helloworld.proto檔案,增加乙個 sayhelloagain 方法,帶有hellorequesthelloreply型別。**如下:

//  greeting 服務定義.

service greeter

// 新增 sayhelloagain

rpc sayhelloagain (hellorequest) returns (helloreply) {}

}// request 訊息體包含 user's name.

message hellorequest

// response 訊息提包含 greetings

message helloreply

現在使用定義好的服務重新生成grpc**。工作目錄為($gopath/src/google.golang.org/grpc/examples/helloworld)。指令如下:

$ protoc -i helloworld/ helloworld/helloworld.proto --go_out=plugins=grpc:helloworld
檔案helloworld.pb.go被重新生成。

雖然已經重新生成 服務端 (server) 和 客戶端 (client) **, 但讓然需要手動修改部分呼叫**。

修改 server

func

(s *server)

sayhelloagain

(ctx context.context, in *pb.hellorequest)

(*pb.helloreply,

error),

nil}

修改 client
r, err = c.

sayhelloagain

(ctx,

&pb.hellorequest

)if err !=

nillog.

printf

("greeting: %s"

, r.message)

執行

執行服務端:

$ go run greeter_server/main.go
執行客戶端:

$ go run greeter_server/main.go
期望結果:

$ go run greeter_client/main.go

greeting: hello world

greeting: hello again world

VML初步接觸

什麼是vml?vml vector markup language 是乙個最初由microsoft開發的xml詞表,現在也只有ie5.0以上版本對vml提供支援。使用vml可以在ie中繪製向量圖形,所以有人認為vml就是在ie中實現了畫筆的功能。下面介紹一下vml的優點 基於xml標準 xml是公認...

glsl初步接觸

在看計算機系的同學的 時,我還不知道glsl這種東西。我還以為opengl繪製就是使用glbegin和glend。我還深深地納悶 opengl這貨畫東西完全不給力,是怎麼做到跟directx相比的?然後我看到了 裡的gluseprogram,看到了程式裡完全沒有出現glbegin這種語句。後來我才知...

初步接觸ubuntu

1 檔案部分helloworld 建立檔案 sudo vi aa.txt 由於許可權問題所以加上管理員許可權sudo 然後進入編輯介面 寫入helloworld 按esc退出 輸入 wq 寫入write並退出quit 檢視檔案 修改檔案許可權 此處還是要用sudo chmod 今天把學習到的先記錄到...