RPC到底是個(gè)啥?舉個(gè)例子告訴你
時(shí)間:2021-09-13 14:00:00
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]深入解析RPC的基本原理

RPC(Remote Procedure Call),是一個(gè)大家既熟悉又陌生的詞,只要涉及到通信,必然需要某種網(wǎng)絡(luò)協(xié)議。我們很可能用過(guò)HTTP,那么RPC又和HTTP有什么區(qū)別呢?RPC還有什么特點(diǎn),常見的選型有哪些?
1. RPC是什么
RPC可以分為兩部分:用戶調(diào)用接口 具體網(wǎng)絡(luò)協(xié)議。前者為開發(fā)者需要關(guān)心的,后者由框架來(lái)實(shí)現(xiàn)。舉個(gè)例子,我們定義一個(gè)函數(shù),我們希望函數(shù)如果輸入為“Hello World”的話,輸出給一個(gè)“OK”,那么這個(gè)函數(shù)是個(gè)本地調(diào)用。如果一個(gè)遠(yuǎn)程服務(wù)收到“Hello World”可以給我們返回一個(gè)“OK”,那么這是一個(gè)遠(yuǎn)程調(diào)用。我們會(huì)和服務(wù)約定好遠(yuǎn)程調(diào)用的函數(shù)名。因此,我們的用戶接口就是:輸入、輸出、遠(yuǎn)程函數(shù)名,比如用 SRPC 開發(fā)的話,client端的代碼會(huì)長(zhǎng)這樣:
int main()
{
Example::SRPCClient client(IP, PORT);
EchoRequest req; // 用戶自定義的請(qǐng)求結(jié)構(gòu)
EchoResponse resp; // 用戶自定義的回復(fù)結(jié)構(gòu)
req.set_message("Hello World");
client.Echo(