網(wǎng)站首頁 編程語言 正文
什么是rpc?
rpc,全稱Remote Procedure Call,通過它,你可以像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程服務(wù)。前端可以調(diào)用后端方法,后端也可以調(diào)用前端方法。其實(shí)這個(gè)概念并不陌生,上一篇關(guān)于web實(shí)時(shí)應(yīng)用的文章也提到了這個(gè)概念,并實(shí)現(xiàn)了前后端互調(diào)的操作。
在正式開始使用grpc之前,我們還需要掌握protocol buffer的概念。
什么是grpc?
grpc來自大名鼎鼎的谷歌,孵化于CNCF基金會(huì)(docker、k8s同樣出自這個(gè)基金會(huì))。它是一款高性能、開源、通用的rpc框架,你可以通過它來定義rpc的請(qǐng)求和響應(yīng)。它基于http/2,全雙工通信、低延遲、高效率、支持流、可輕松的插入身份認(rèn)證、負(fù)載均衡、監(jiān)控日志等等等等。。。關(guān)鍵是它還可以跨語言操作。只要server端或client端是它支持的語言編寫,都可以跨語言操作。官方支持的開發(fā)語言:
為什么用protocol buffer?
因?yàn)間rpc采用合約優(yōu)先的API開發(fā)模式,默認(rèn)采用protocol buffer作為接口設(shè)計(jì)語言,我們可以在proto文件里定義消息和服務(wù)。當(dāng)然,作為默認(rèn)選項(xiàng),它自然是有優(yōu)勢(shì)的,主要是這些:
- 1、語法簡(jiǎn)單,容易上手。
- 2、可生成所有(官方稱)主流開發(fā)語言的代碼。
- 3、二進(jìn)制格式,效率高的同時(shí)也很適合大數(shù)據(jù)傳輸。
了解完基礎(chǔ)以后,先上一個(gè)小demo參考一下:
syntax = "proto3"; import "aaa.proto"; option csharp_namespace = "gRPCApiDemo.Protos"; package Demo; service Math{ rpc Add (AddRequest) returns (AddRespones); } message AddRequest{ int32 a=1; int32 b=2; } message AddRespones{ int32 a=1; repeated int32 b=2; reserved 3,4 to 10; reserved "phone";}
解讀一下:
- syntax:聲明當(dāng)前使用的語法
- import:引入其他proto
- option csharp_namespace:打包以后類的命名空間,優(yōu)先級(jí)高
- package:打包以后類的命名空間,優(yōu)先級(jí)低
- service:聲明服務(wù)
- rpc Add (AddRequest) returns (AddRespones):聲明一個(gè)rpc調(diào)用,接收AddRequest消息,返回AddRespones消息。
- message:聲明消息
- int32:數(shù)據(jù)類型,常用的還有int64、float、string、bool等,有興趣的可以去查一下。
- a=1:如果把a(bǔ)看作字段名,那么1相當(dāng)于字段名的別名。
- repeated:可重復(fù)字段。如果給b多個(gè)值,那么b差不多相當(dāng)于一個(gè)int類型的數(shù)組,先后順序會(huì)被保留。
- reserved:保留字段,聲明以后的字段名和別名都不允許再使用了。需要注意字段名和別名不能一起聲明。
編譯proto
proto編譯的主要目的是生成代碼。
首先是工具,點(diǎn)擊這里,選出適合自己系統(tǒng)的插件,如圖:
下載完以后隨便找個(gè)目錄解壓,然后把其中的bin目錄添加到環(huán)境變量里:
如果在控制臺(tái)輸入protoc可以看到一堆信息彈出來,就表示安裝成功了:
在我們使用protoc把proto文件編譯成c#文件之前,我們還需要做這些:
- 1、指定proto項(xiàng)目路徑。
可以用rotoc --IPath(或--proto_path)或者直接打開控制臺(tái)轉(zhuǎn)到protoc安裝目錄。
- 2、指定生成文件的類型和路徑。
protoc --csharp_out=cs grpcApi.proto //如果有多個(gè)proto文件想批量生成可以使用 *.proto
上面的cs是我新建的文件夾名(這個(gè)文件夾是建立在proto項(xiàng)目目錄下的),grpcApi.proto是自建的proto文件,執(zhí)行結(jié)果見圖:
成功以后會(huì)在指定的目錄下生成cs文件,見圖:
生成的文件和proto文件命名一樣,只不過首字母會(huì)自動(dòng)大寫,打開看看:
好吧能看懂的有限,所以看看就行了。
不過有一點(diǎn)千萬注意:這個(gè)cs文件不要手動(dòng)改,不要手動(dòng)改,不要手動(dòng)改!
關(guān)于應(yīng)用
能使用編譯器生成代碼就可以用了么?其實(shí)還差很多。距離正式應(yīng)用還差服務(wù)端和客戶端的編寫部署。
有空的話補(bǔ)下一篇,會(huì)有具體實(shí)現(xiàn)的流程和代碼。
原文鏈接:https://www.cnblogs.com/muchengqingxin/p/13209800.html
相關(guān)推薦
- 2022-10-05 Python數(shù)據(jù)可視化制作全球地震散點(diǎn)圖_python
- 2022-09-04 使用Django+Pytest搭建在線自動(dòng)化測(cè)試平臺(tái)_python
- 2022-10-05 Redis實(shí)現(xiàn)數(shù)據(jù)的交集、并集、補(bǔ)集的示例_Redis
- 2022-11-03 一文詳解C++子類函數(shù)為什么不能重載父類函數(shù)_C 語言
- 2023-02-10 C++?deque與vector對(duì)比的優(yōu)缺點(diǎn)_C 語言
- 2022-12-28 React組件實(shí)例三大核心屬性State?props?Refs詳解_React
- 2022-11-06 react中braft-editor的基本使用方式_React
- 2024-04-07 mybatis-plus插入數(shù)據(jù)庫值無效(插入不對(duì),沒有插入數(shù)據(jù)庫默認(rèn)值,int的類型的null會(huì)變
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支