RPC是遠程過程調用(Remote Procedure Call)的縮寫形式。
SAP系統RPC調用的原理其實很簡單,有一些類似于三層構架的C/S系統,第三方的客戶程序通過接口調用SAP內部的標準或自定義函數,獲得函數返回的數據進行處理后顯示或打印。 (推薦學習: swoole視頻教程)
進程間通信(IPC)是在多任務操作系統或聯網的計算機之間運行的程序和進程所用的通信技術。有兩種類型的進程間通信(IPC)。
本地過程調用(LPC)LPC用在多任務操作系統中,使得同時運行的任務能互相會話。這些任務共享內存空間使任務同步和互相發送信息。
遠程過程調用(RPC)RPC類似于LPC,只是在網上工作。RPC開始是出現在Sun微系統公司和HP公司的運行UNⅨ操作系統的計算機中。
Swoole框架提供的RPC服務器支持了單連接并發、PHP-FPM下長連接維持等特性。在車輪互聯大規模應用,構建了4層架構的服務化架構。
很多企業使用Http Rest實現RPC通信,實現簡單可以利用到很多現成的工具和方案。但是Http通信協議存在2個嚴重的缺陷。
Http不支持單連接并發,如果要同時并發很多請求,必須創建大量TCP連接。如果php-fpm開啟500個進程,每次需要128個并發,那么就需要創建64000個TCP連接。
Http對長連接支持不夠好,很多Http程序都是設計為短連接的,在請求時創建TCP連接、請求結束時close,這會帶來額外的網絡通信消耗
Swoole框架的RPC客戶端使用16字節固定包頭+包體的通信方式,支持單連接并發、支持在php-fpm開啟長連接。
php-fpm長連接
在php-fpm中維持TCP長連接主要借助swoole擴展提供的SWOOLE_KEEP選項,客戶端設置此選項后,在請求結束時不會關閉連接,新的請求到來后可以復用TCP連接。另外底層內置了長連接檢測的能力。
在執行$client->connect()自動檢測連接是否可用,如果復用的連接已經失效,底層會重新創建一個新的TCP長連接。
在執行$client->connect()自動清理垃圾數據,避免上一次客戶端超時殘留的數據導致服務異常
$socket = new swoole_client(SWOOLE_SOCK_TCP | SWOOLE_KEEP, WOOLE_SOCK_SYNC); $socket->set(array( 'open_length_check' => true, 'package_max_length' => $this->packet_maxlen, 'package_length_type' => 'N', 'package_body_offset' => RPCServer::HEADER_SIZE, 'package_length_offset' => 0, ));
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com