什么是RPC框架?
如果用一句話概括RPC就是:遠程調用框架(Remote Procedure Call
)
那什么是遠程調用?
通常我們調用一個php中的方法,比如這樣一個函數方法: localAdd(10, 20),localAdd方法的具體實現(xiàn)要么是用戶自己定義的,要么是php庫函數中自帶的,也就說在localAdd方法的代碼實現(xiàn)在本地,它是一個本地調用!遠程調用意思就是:被調用方法的具體實現(xiàn)不在程序運行本地,而是在別的某個遠程地方。
遠程調用原理
比如 A (client) 調用 B (server) 提供的remoteAdd方法:
首先A與B之間建立一個TCP連接;
然后A把需要調用的方法名(這里是remoteAdd)以及方法參數(10, 20)序列化成字節(jié)流發(fā)送出去;
B接受A發(fā)送過來的字節(jié)流,然后反序列化得到目標方法名,方法參數,接著執(zhí)行相應的方法調用(可能是localAdd)并把結果30返回;
A接受遠程調用結果,輸出30。
RPC框架就是把我剛才說的這幾點些細節(jié)給封裝起來,給用戶暴露簡單友好的API使用。
遠程調用的好處
解耦:當server需要對方法內實現(xiàn)修改時,client完全感知不到,不用做任何變更;這種方式在跨部門,跨公司合作的時候經常用到,并且方法的提供者我們通常稱為:服務的暴露。
RPC與Socket有什么區(qū)別?
通過上面的簡單闡述,好像RPC與Socket 好像啊。都是調用遠程的方法,都是client/server模式,我之前也寫了一篇文章: 細說socket 那他們有啥區(qū)別呢?
RPC(遠程過程調用)采用客戶機/服務器模式實現(xiàn)兩個進程之間相互通信。socket是RPC經常采用的通信手段之一,RPC是在Socket的基礎上實現(xiàn)的,它比socket需要