gRPC官網(wǎng):http://doc.oschina.net/grpc?t=58008
一、RPC 是什么爽柒?
????????在 gRPC 里客戶端應(yīng)用可以像調(diào)用本地對象一樣直接調(diào)用另一臺(tái)不同的機(jī)器上服務(wù)端應(yīng)用的方法,使得您能夠更容易地創(chuàng)建分布式應(yīng)用和服務(wù)哑姚。與許多 RPC 系統(tǒng)類似羹唠,gRPC 也是基于以下理念:定義一個(gè)服務(wù)志鹃,指定其能夠被遠(yuǎn)程調(diào)用的方法(包含參數(shù)和返回類型)。在服務(wù)端實(shí)現(xiàn)這個(gè)接口信轿,并運(yùn)行一個(gè) gRPC 服務(wù)器來處理客戶端調(diào)用晃痴。在客戶端擁有一個(gè)存根能夠像服務(wù)端一樣的方法残吩。
二、使用 protocol buffers
????????gRPC 默認(rèn)使用 protocol buffers倘核,這是 Google 開源的一套成熟的結(jié)構(gòu)數(shù)據(jù)序列化機(jī)制(當(dāng)然也可以使用其他數(shù)據(jù)格式如 JSON)泣侮。
? ??????例子內(nèi)使用的卻一種名叫 proto3 的新風(fēng)格的 protocol buffers,它擁有輕量簡化的語法紧唱、一些有用的新功能活尊,并且支持更多新語言。
? ??????我們通常建議你在 gRPC 里使用 proto3漏益,因?yàn)檫@樣你可以使用 gRPC 支持全部范圍的的語言蛹锰,并且能避免 proto2 客戶端與 proto3 服務(wù)端交互時(shí)出現(xiàn)的兼容性問題,反之亦然绰疤。
三铜犬、Hello word
????????現(xiàn)在你已經(jīng)對 gRPC 有所了解,了解其工作機(jī)制最簡單的方法是看一個(gè)簡單的例子轻庆。 Hello World 將帶領(lǐng)你創(chuàng)建一個(gè)簡單的客戶端——服務(wù)端應(yīng)用癣猾,向你展示:
通過一個(gè) protocol buffers 模式,定義一個(gè)簡單的帶有 Hello World 方法的 RPC 服務(wù)余爆。
用你最喜歡的語言(如果可用的話)來創(chuàng)建一個(gè)實(shí)現(xiàn)了這個(gè)接口的服務(wù)端纷宇。
用你最喜歡的(或者其他你愿意的)語言來訪問你的服務(wù)端。
1.定義服務(wù)
????????一個(gè) RPC 服務(wù)通過參數(shù)和返回類型來指定可以遠(yuǎn)程調(diào)用的方法龙屉。就像你在 概覽 里所看到的呐粘, gRPC 通過 protocol buffers 來實(shí)現(xiàn)。
? ??????我們使用 protocol buffers 接口定義語言來定義服務(wù)方法转捕,用 protocol buffer 來定義參數(shù)和返回類型∷衾客戶端和服務(wù)端均使用服務(wù)定義生成的接口代碼五芝。
????????這里有我們服務(wù)定義的例子,在 helloworld.proto 里用 protocol buffers IDL 定義的辕万。Greeter 服務(wù)有一個(gè)方法 SayHello 枢步,可以讓服務(wù)端從遠(yuǎn)程客戶端接收一個(gè)包含用戶名的 HelloRequest 消息后,在一個(gè) HelloReply 里發(fā)送回一個(gè) Greeter渐尿。這是你可以在 gRPC 里指定的最簡單的 RPC - 你可以在教程里找到針對你選擇的語言更多類型的例子醉途。
2、生成 gRPC 代碼
????????一旦定義好服務(wù)砖茸,我們可以使用 protocol buffer 編譯器protoc來生成創(chuàng)建應(yīng)用所需的特定客戶端和服務(wù)端的代碼 - 你可以生成任意 gRPC 支持的語言的代碼隘擎,當(dāng)然 PHP 和 Objective-C 僅支持創(chuàng)建客戶端代碼。生成的代碼同時(shí)包括客戶端的存根和服務(wù)端要實(shí)現(xiàn)的抽象接口凉夯,均包含Greeter所定義的方法货葬。
(假如你沒有在系統(tǒng)里安裝 gRPC 插件和 protoc 采幌,并且僅僅是要看一下這個(gè)例子,你可以跳過這一步震桶,直接到下一步來查看生成的代碼休傍。)
3.寫一個(gè)服務(wù)器
? ??????現(xiàn)在讓我們寫點(diǎn)代碼!首先我們將創(chuàng)建一個(gè)服務(wù)應(yīng)用來實(shí)現(xiàn)服務(wù)(你會(huì)記起來蹲姐,我們可以是使用除了Objective-C and PHP 外的其他所有語言來實(shí)現(xiàn))
????????在這里我們創(chuàng)建了合理的 gRPC 服務(wù)器磨取,將我們實(shí)現(xiàn)的 Greeter 服務(wù)綁定到一個(gè)端口。然后我們啟動(dòng)服務(wù)器:服務(wù)器現(xiàn)在已準(zhǔn)備好從 Greeter 服務(wù)客戶端接收請求柴墩。我們將在具體語言對應(yīng)的文檔里更深入地了解這所有的工作是怎樣進(jìn)行的忙厌。
4.寫一個(gè)客戶端
????????客戶端的 gRPC 非常簡單。在這一步拐邪,我們將用生成的代碼寫一個(gè)簡單的客戶程序來訪問我們在上一節(jié)里創(chuàng)建的 Greeter 服務(wù)器慰毅。