程序员如何用gRPC谈一场恋爱
導語: 本文以幽默詼諧的方式,介紹gRPC的4種client-server服務模式的開發實踐及應用場景
The best way to learn is to teach. gRPC的examples里的例子是一個簡易的router,瑣碎的業務代碼很多,看起來比較繞。于是就自己寫一個例子,看看自己是否都將這些知識點掌握了。
談戀愛的過程,其實跟client-server服務模式非常像。單獨講這4種模式有些無聊,所以就嘗試用一種盡量有趣的方式去介紹,順便也可以作為某些男生的一份簡單的戀愛指南。
這里先將重要的結論寫出來,方便以后查閱,具體介紹見下文。找不到準確的中文來翻譯這幾種模式,就保留了英文。
?0x1: A simple RPC?
最簡單的一發一收的client-server模型。這就是我們用得最多的模式
?0x2:?A client-to-server streaming RPC
client先建立長連接,然后發送多個request給server,server最后統一回一個rsp
?????應用場景:
agent上報CPU,內存等數據到server
客戶端心跳
客戶端并發調用細小粒度的接口。比如有5個后臺接口A B C D E,客戶端在不同頁面,可以調用不同的接口組合。比如在個人頁,就調用ABC;在動態頁面,就調用CDE,后臺都只會有一個rsp。這種模式的好處就是讓后臺可以將接口的粒度細化,客戶端調用靈活,減少重復代碼,提高復用率
0x3: A server-to-client streaming RPC?
client先發一個請求到server,然后server不停的回包
? ? ? 應用場景:
股票app??蛻舳讼蚍斩税l送一個股票代碼,服務端就把該股票的實時數據源源不斷的返回給客戶端
app的在線push。client先發請求到server注冊,然后server就可以發在線push了
0x4: A Bidirectional streaming RPC?
建立一個長連接,然后client和server可以隨意收發數據
? ? ? 應用場景:
聊天機器人
有狀態的游戲服務器進行數據交換。比如LOL,王者榮耀等競技游戲,client和server之間需要非常頻繁地交換數據
總結:除了一發一收的模式,client-to-server與server-to-client這兩種模式,其實用雙向RPC都可以做到。但是雙向RPC的編碼難度更高(后面例子中可以看到),異常處理也需要更仔細,所以具體使用哪種模式需要根據具體需求來分析
接下來就讓我用一個男女生之間的交往故事來說明這4種服務模式。內容純屬虛構,并故意寫得比較搞笑。如果有不恰當的描述,請告訴我。
一些說明
Selina:女生名字,client
John:男生名字,server
等等,女生是client,男生是server。那么,女生給男生提要求,是不是就是client向server請求數據一樣自然!!!!噢噢噢,這應該是我學編程以來,領悟到的最重要的道理吧!!!
基礎代碼說明
client
(左滑可查看完整代碼,下同)
server
0x1: A simple RPC
Selina職場工作不順,剛被leader說了一頓,又恰好來大姨媽了,心情十分不好,問John:在哪
John正在打游戲,非常忙,未察覺出Selina的語氣有異樣,說:剛起床,在打游戲呢
這種模式就是我們用得最多的模式,一發一收
client代碼
server代碼
0x2:?A client-to-server streaming RPC
Selina開始向John訴苦,說了很多話
John忙著打游戲,只看清“我來大姨媽了”,就只回了一句:哦,多喝熱水
這種模式是client先建立長連接,然后發送多個request給server,server最后統一回一個rsp。
應用場景
agent收集CPU,內存等數據到server
客戶端心跳
客戶端并發調用細小粒度的接口。比如有5個后臺接口A B C D E,客戶端在不同頁面,可以調用不同的接口組合,比如在個人頁,就調用ABC;在動態頁面,就調用CDE,后臺都只會有一個rsp。這種模式的好處就是讓后臺可以將接口的粒度細化,客戶端調用靈活,減少重復代碼,提高復用率
client代碼
server代碼
0x3: A server-to-client streaming RPC
Selina生氣了
John先一直想解決方案,然后發現沒有回應,就要買禮物,安慰等措施:包治百病
這種模式是client先發一個請求到server,然后server不停的回包
應用場景
股票app。客戶端向服務端發送一個股票代碼,服務端就把該股票的實時數據源源不斷的返回給客戶端
app的在線push。client先發請求到server注冊,然后server就可以發在線push了
client代碼
server代碼
0x4: A Bidirectional streaming RPC
John道歉,買禮物,Selina不再生氣,于是開始聊天
這種模式就是建立一個長連接,然后client和server可以隨意收發數據
應用場景
聊天機器人
有狀態的游戲服務器進行數據交換。比如LOL,王者榮耀等競技游戲,client和server之間需要非常頻繁地交換數據
client代碼
server代碼
男生們看過來,看過來
既然標題寫了“用gRPC教程序員談戀愛”,那么肯定就得給點干貨。女生可能天生比男生更感性一些,所以當女生在傾訴問題的時候,千萬不要只去想解決方案,而是要盡快地安慰女生,傾聽她的吐槽,順著她的思路去稍微吐槽下??梢該Q位思考,如果你自己心情不好的時候,肯定也想有人來安慰,而不是想聽到”你要看開一點,這樣工作效率才會高”之類的解決方案的話
在傾聽和安慰之后,然后把問題解決,或者幫助女生把問題解決。做和說同樣重要。
總結
以上是生活随笔為你收集整理的程序员如何用gRPC谈一场恋爱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++避坑指南
- 下一篇: 直播预告|中台基石腾讯云TStack的正