新聞中心
1.介紹
我們上一篇文章「Golang 語言 gRPC 使用的接口設計語言 protobuf」介紹了 Golang 語言 gRPC 使用的接口設計語言 Protobuf,本文我們開始介紹主角 - 谷歌開源的 RPC 框架 gRPC。

創(chuàng)新互聯(lián)主要從事成都網(wǎng)站設計、網(wǎng)站制作、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務城西,十余年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:028-86922220
在正式介紹 gRPC 之前,我們先簡單介紹一下什么是 RPC,它是 Remote Procedure Call 的縮寫,中文譯為遠程過程調(diào)用(也可譯為遠程方法調(diào)用或遠程調(diào)用),它是計算機通信協(xié)議,該協(xié)議可以實現(xiàn)調(diào)用遠程服務就像調(diào)用本地服務一樣簡單,無需關心跨網(wǎng)絡,跨平臺,跨語言等問題。
gRPC 是通信協(xié)議基于 HTTP/2,支持多語言的 RPC 框架,使用 Protobuf 作為它的接口設計語言(IDL),可以通過 protoc 工具生成 Golang 語言的結構體,服務端接口和客戶端 Stub。
gRPC 消息序列化方式通常使用 Protobuf,它是二進制格式,體積小,網(wǎng)絡傳輸快,占用帶寬流量少,調(diào)用性能更高,但是可讀性差。不過,gRPC 也支持 JSON 序列化方式。
「圖片來源:https://grpc.io/img/landing-2.svg」
2.怎么使用 gRPC 定義服務端
gRPC 默認使用 Protobuf 作為接口設計語言,我們可以在 .proto 文件中使用 service 關鍵字定義服務,使用 rpc 和 returns 關鍵字定義指定請求參數(shù)和返回結果的方法。
示例代碼:
- service User {
- rpc Login (LoginRequest) returns (LoginResponse);
- }
- message LoginRequest {
- string email = 1;
- string password = 2;
- }
- message LoginResponse {
- int64 id = 1;
- string name = 2;
- }
閱讀上面這段代碼,我們使用 Protobuf 接口設計語言定義了一個一元 RPC 服務,即客戶端向服務端發(fā)送一個請求,服務端向客戶端返回一個響應。
此外,gRPC 還支持另外三種定義服務的方式,即服務器流式 RPC、客戶端流式 RPC 和雙向流式 RPC。限于篇幅,我準備在后續(xù)文章中詳細介紹這四種定義服務的方式,本文先不展開介紹。
gRPC 提供了 Protobuf 編譯器插件 protoc-gen-grpc,用于編譯 .proto 文件,生成服務端和客戶端代碼,我們只需在服務端編寫實現(xiàn) Api 的代碼,然后在客戶端調(diào)用 Api。
3.怎么使用 gRPC 的客戶端
我們通過 protoc 編譯 .proto 文件,自動生成服務端和客戶端代碼后,我們?nèi)绻胍褂?gRPC 的客戶端,還需要手動編寫客戶端代碼,也就是在服務端實現(xiàn) Api 的業(yè)務邏輯代碼,然后在客戶端調(diào)用 Api,具體如下:
在服務端,手動編寫生成的服務端方法的業(yè)務邏輯代碼,然后運行 gRPC 服務,接收并處理客戶端請求,gRPC 服務自動解碼請求參數(shù),然后執(zhí)行服務的方法,并將返回結果自動進行編碼。
在客戶端,Stub (也稱為存根或客戶端)實現(xiàn)和服務相同的方法,然后客戶端可以本地調(diào)用這些方法,將請求參數(shù)封裝在 Protobuf 的消息類型中,gRPC 將請求發(fā)送給服務器,并返回服務器的 Protobuf 序列化方式的響應消息。
4總結
本文我們介紹了 gRPC 到底是什么,怎么定義 gRPC 的服務端,以及怎么使用 gRPC 的客戶端。更多關于 gRPC 的介紹,我建議感興趣的讀者朋友們閱讀官網(wǎng)文檔了解更多。
本文轉載自微信公眾號「Golang語言開發(fā)?!?,可以通過以下二維碼關注。轉載本文請聯(lián)系Golang語言開發(fā)棧公眾號。
網(wǎng)站標題:Golang 語言 gRPC 到底是什么?
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/dphoidg.html


咨詢
建站咨詢
