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 方法,帶有hellorequest和helloreply型別。**如下:
// 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}
修改 clientr, 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 今天把學習到的先記錄到...