什麼是RPC框架 ?
如果用一句話概括RPC就是:遠端呼叫框架(Remote Procedure Call)
那什麼是 遠端呼叫 ?
通常我們呼叫一個php中的方法,例如這樣一個函數方法: localAdd(10, 20),localAdd方法的具體實作要么是用戶自己定義的,要么是php函式庫函數中自帶的,也就說在localAdd方法的程式碼實作在本地,它是一個本地呼叫!
遠端呼叫 意思是:被呼叫方法的具體實作 不在 程式運行本地,而是在別的某個遠端地方。
遠端呼叫原理
例如A (client) 呼叫B (server) 提供的remoteAdd 方法:
首先A與B之間建立一個TCP連線;
然後A把需要呼叫的方法名稱(這裡是remoteAdd)以及方法參數(10,20)序列化成字節流發送出去;
B接受A發送過來的位元組流,然後反序列化得到目標方法名,方法參數,接著執行對應的方法呼叫(可能是localAdd)並把結果30回傳;
A接受遠端呼叫結果,輸出30。
RPC框架就是把我剛才說的這幾點些細節給封裝起來,給用戶暴露簡單友好的API使用。
遠端呼叫的好處
解耦:當server需要對方法內實作修改時,client完全感知不到,不用做任何變更;這種方式在跨部門,跨公司合作的時候經常用到,並且方法的提供者我們通常稱為:服務的暴露。
RPC與Socket有什麼不同?
透過上面的簡單闡述,好像RPC與Socket 好像啊。都是呼叫遠端的方法,都是client/server模式,我之前也寫了一篇文章: 細說socket 那他們有啥區別呢?
RPC(遠端過程呼叫)採用客戶機/伺服器模式實現兩個進程之間相互通訊。 socket是RPC經常採用的通訊手段之一,RPC是在Socket的基礎上實現的,它比socket需要更多的網路和系統資源。除了Socket,RPC還有其他的通訊方法,例如:http、作業系統自帶的管道等技術來實現對於遠端程式的呼叫。微軟的Windows系統中,RPC就是採用命名管道進行通訊。
RPC與REST有什麼差別?
透過了解RPC後,我們知道是RPC是client/server模式的,呼叫遠端的方法,REST也是我們熟悉的一套API呼叫協定方法,它也是基於client/server模式的,呼叫遠程的方法的,那他兩個又有啥差別呢?
REST API 和RPC 都是在Server端把一個個函數封裝成介面暴露出去,以供Client端調用,不過REST API 是基於HTTP協定的,REST致力於透過http協定中的POST/ GET/PUT/DELETE等方法和一個可讀性強的URL來提供一個http請求。而RPC 則可以不基於HTTP協定
因此,如果是後端兩種語言互相調用,用RPC 可以獲得更好的效能(省去了HTTP 標頭等一系列東西),應該也更容易配置。如果是前端透過 AJAX 呼叫後端,那麼用 REST API 的形式比較好(因為無論如何也避不開 HTTP 這道坎)。
php中流行的rpc框架有哪些?
既然php是全世界最好的語言,php中流行的RPC框架有哪些呢?
先列舉: phprpc , yar , thrift , gRPC , swoole , hprose
因為時間和精力有限,不可能一個一個的去學習和使用,我選幾個世面上用的最多的幾個用下吧。因為RPC原理是一樣的,都是Client/Server模式,只是每個框架的使用方式不一樣而已。
以上是php rpc框架有哪些的詳細內容。更多資訊請關注PHP中文網其他相關文章!