自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Golang 語(yǔ)言 gRPC 到底是什么?

開(kāi)發(fā) 后端
在正式介紹 gRPC 之前,我們先簡(jiǎn)單介紹一下什么是 RPC,它是 Remote Procedure Call 的縮寫(xiě),中文譯為遠(yuǎn)程過(guò)程調(diào)用(也可譯為遠(yuǎn)程方法調(diào)用或遠(yuǎn)程調(diào)用),它是計(jì)算機(jī)通信協(xié)議,該協(xié)議可以實(shí)現(xiàn)調(diào)用遠(yuǎn)程服務(wù)就像調(diào)用本地服務(wù)一樣簡(jiǎn)單,無(wú)需關(guān)心跨網(wǎng)絡(luò),跨平臺(tái),跨語(yǔ)言等問(wèn)題。

[[421001]]

1.介紹

我們上一篇文章「Golang 語(yǔ)言 gRPC 使用的接口設(shè)計(jì)語(yǔ)言 protobuf」介紹了 Golang 語(yǔ)言 gRPC 使用的接口設(shè)計(jì)語(yǔ)言 Protobuf,本文我們開(kāi)始介紹主角 - 谷歌開(kāi)源的 RPC 框架 gRPC。

在正式介紹 gRPC 之前,我們先簡(jiǎn)單介紹一下什么是 RPC,它是 Remote Procedure Call 的縮寫(xiě),中文譯為遠(yuǎn)程過(guò)程調(diào)用(也可譯為遠(yuǎn)程方法調(diào)用或遠(yuǎn)程調(diào)用),它是計(jì)算機(jī)通信協(xié)議,該協(xié)議可以實(shí)現(xiàn)調(diào)用遠(yuǎn)程服務(wù)就像調(diào)用本地服務(wù)一樣簡(jiǎn)單,無(wú)需關(guān)心跨網(wǎng)絡(luò),跨平臺(tái),跨語(yǔ)言等問(wèn)題。

gRPC 是通信協(xié)議基于 HTTP/2,支持多語(yǔ)言的 RPC 框架,使用 Protobuf 作為它的接口設(shè)計(jì)語(yǔ)言(IDL),可以通過(guò) protoc 工具生成 Golang 語(yǔ)言的結(jié)構(gòu)體,服務(wù)端接口和客戶(hù)端 Stub。

gRPC 消息序列化方式通常使用 Protobuf,它是二進(jìn)制格式,體積小,網(wǎng)絡(luò)傳輸快,占用帶寬流量少,調(diào)用性能更高,但是可讀性差。不過(guò),gRPC 也支持 JSON 序列化方式。

「圖片來(lái)源:https://grpc.io/img/landing-2.svg」

2.怎么使用 gRPC 定義服務(wù)端

gRPC 默認(rèn)使用 Protobuf 作為接口設(shè)計(jì)語(yǔ)言,我們可以在 .proto 文件中使用 service 關(guān)鍵字定義服務(wù),使用 rpc 和 returns 關(guān)鍵字定義指定請(qǐng)求參數(shù)和返回結(jié)果的方法。

示例代碼:

  1. service User { 
  2.   rpc Login (LoginRequest) returns (LoginResponse); 
  3.  
  4. message LoginRequest { 
  5.   string email = 1; 
  6.   string password = 2; 
  7.  
  8. message LoginResponse { 
  9.   int64 id = 1; 
  10.   string name = 2; 

閱讀上面這段代碼,我們使用 Protobuf 接口設(shè)計(jì)語(yǔ)言定義了一個(gè)一元 RPC 服務(wù),即客戶(hù)端向服務(wù)端發(fā)送一個(gè)請(qǐng)求,服務(wù)端向客戶(hù)端返回一個(gè)響應(yīng)。

此外,gRPC 還支持另外三種定義服務(wù)的方式,即服務(wù)器流式 RPC、客戶(hù)端流式 RPC 和雙向流式 RPC。限于篇幅,我準(zhǔn)備在后續(xù)文章中詳細(xì)介紹這四種定義服務(wù)的方式,本文先不展開(kāi)介紹。

gRPC 提供了 Protobuf 編譯器插件 protoc-gen-grpc,用于編譯 .proto 文件,生成服務(wù)端和客戶(hù)端代碼,我們只需在服務(wù)端編寫(xiě)實(shí)現(xiàn) Api 的代碼,然后在客戶(hù)端調(diào)用 Api。

3.怎么使用 gRPC 的客戶(hù)端

我們通過(guò) protoc 編譯 .proto 文件,自動(dòng)生成服務(wù)端和客戶(hù)端代碼后,我們?nèi)绻胍褂?gRPC 的客戶(hù)端,還需要手動(dòng)編寫(xiě)客戶(hù)端代碼,也就是在服務(wù)端實(shí)現(xiàn) Api 的業(yè)務(wù)邏輯代碼,然后在客戶(hù)端調(diào)用 Api,具體如下:

在服務(wù)端,手動(dòng)編寫(xiě)生成的服務(wù)端方法的業(yè)務(wù)邏輯代碼,然后運(yùn)行 gRPC 服務(wù),接收并處理客戶(hù)端請(qǐng)求,gRPC 服務(wù)自動(dòng)解碼請(qǐng)求參數(shù),然后執(zhí)行服務(wù)的方法,并將返回結(jié)果自動(dòng)進(jìn)行編碼。

在客戶(hù)端,Stub (也稱(chēng)為存根或客戶(hù)端)實(shí)現(xiàn)和服務(wù)相同的方法,然后客戶(hù)端可以本地調(diào)用這些方法,將請(qǐng)求參數(shù)封裝在 Protobuf 的消息類(lèi)型中,gRPC 將請(qǐng)求發(fā)送給服務(wù)器,并返回服務(wù)器的 Protobuf 序列化方式的響應(yīng)消息。

4總結(jié)

本文我們介紹了 gRPC 到底是什么,怎么定義 gRPC 的服務(wù)端,以及怎么使用 gRPC 的客戶(hù)端。更多關(guān)于 gRPC 的介紹,我建議感興趣的讀者朋友們閱讀官網(wǎng)文檔了解更多。

本文轉(zhuǎn)載自微信公眾號(hào)「Golang語(yǔ)言開(kāi)發(fā)棧」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Golang語(yǔ)言開(kāi)發(fā)棧公眾號(hào)。

 

責(zé)任編輯:武曉燕 來(lái)源: Golang語(yǔ)言開(kāi)發(fā)棧
相關(guān)推薦

2023-03-29 08:24:46

Rune類(lèi)型開(kāi)源項(xiàng)目

2011-04-27 09:30:48

企業(yè)架構(gòu)

2020-10-14 06:22:14

UWB技術(shù)感知

2010-11-01 01:25:36

Windows NT

2020-09-22 08:22:28

快充

2020-09-27 06:53:57

MavenCDNwrapper

2019-10-30 10:13:15

區(qū)塊鏈技術(shù)支付寶

2010-04-22 14:14:29

Live-USB

2020-08-04 14:20:20

數(shù)據(jù)湖Hadoop數(shù)據(jù)倉(cāng)庫(kù)

2013-06-09 09:47:31

.NetPDBPDB文件

2021-09-03 09:12:09

Linux中斷軟件

2021-01-21 21:24:34

DevOps開(kāi)發(fā)工具

2023-07-12 15:32:49

人工智能AI

2024-02-04 00:01:00

云原生技術(shù)容器

2020-03-05 10:28:19

MySQLMRR磁盤(pán)讀

2021-07-07 05:07:15

JDKIterator迭代器

2022-10-08 00:00:00

Spring數(shù)據(jù)庫(kù)項(xiàng)目

2021-02-05 10:03:31

區(qū)塊鏈技術(shù)智能

2023-03-26 12:27:30

2009-06-09 22:11:44

JavaScriptObject
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)