今天就跟大家聊聊有關(guān)如何進(jìn)行Yar并行的RPC框架使用分析,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
廬山ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
RPC,就是Remote Procedure Call的簡稱呀,翻譯成中文就是遠(yuǎn)程過程調(diào)用
RPC要解決的兩個問題:
解決分布式系統(tǒng)中,服務(wù)之間的調(diào)用問題。
遠(yuǎn)程調(diào)用時,要能夠像本地調(diào)用一樣方便,讓調(diào)用者感知不到遠(yuǎn)程調(diào)用的邏輯
如果模仿B/S架構(gòu)的調(diào)用方式,每次調(diào)用時,都需要寫一串發(fā)起http請求的代碼。比如new Curl()...之類的,能不能像本地調(diào)用一樣,去發(fā)起遠(yuǎn)程調(diào)用,讓使用者感知不到遠(yuǎn)程調(diào)用的過程。
實(shí)際情況下,RPC很少用到http協(xié)議來進(jìn)行數(shù)據(jù)傳輸,畢竟我只是想傳輸一下數(shù)據(jù)而已,何必動用到一個文本傳輸?shù)膽?yīng)用層協(xié)議。 為什么不直接使用二進(jìn)制傳輸。
$ pecl install yar $ pecl install msgpack
服務(wù)端代碼:
<?php require_once 'Email.php'; require_once 'Sms.php'; class Service { private $sms; private $email; public function __construct() { $this->sms = new Sms(); $this->email = new Email(); } /** * @param $mobile * @return string */ public function sendSms($mobile, $content = '短信內(nèi)容') { return $this->sms->send($mobile, $content); } /** * @param $email * @return string */ public function sendEmail($email) { return $this->email->send($email); } } $service = new Yar_Server(new Service()); $service->handle();
客戶端代碼:
<?php // 一、直接調(diào)用 //$client = new Yar_Client("http://192.168.2.138/api/"); //$client->SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000); //$result = $client->sendSms('18234065200', '我是短信內(nèi)容'); //echo $result; // 二、并行調(diào)用 // public static call ( string $uri , string $method [, array $parameters [, callable $callback [, callable $error_callback [, array $options ]]]] ) // callback 回掉函數(shù), 在遠(yuǎn)程服務(wù)的返回到達(dá)的時候被Yar調(diào)用, 從而可以處理返回內(nèi)容 如果沒有設(shè)置則調(diào)用loop中的callback // error_callback // $options Yar_Concurrent_Client::call("http://192.168.2.138/api/", "sendSms", ['18234065200', '歡迎注冊']); Yar_Concurrent_Client::call("http://192.168.2.138/api/", "sendEmail", ['12580@qq.com'], "callback", "callError", [YAR_OPT_TIMEOUT => 10]); // 發(fā)送請求 // public static loop ([ callable $callback [, callable $error_callback ]] ) Yar_Concurrent_Client::loop("loopCallback", "loopError"); function callback($retval, $callinfo) { echo 'call自己的回調(diào):' . $callinfo['method'] . '方法返回數(shù)據(jù)' . $retval . PHP_EOL; } // 錯誤回掉函數(shù), 如果設(shè)置了, Yar在發(fā)送出所有的請求之后立即調(diào)用一次這個回掉函數(shù)(此時還沒有任何請求返回), 調(diào)用的時候$callinfo參數(shù)是NULL function loopCallback($retval, $callinfo) { if (is_null($callinfo)) { echo '所有rpc請求發(fā)送完畢調(diào)用' . PHP_EOL; } else { echo '調(diào)用成功后返回' . PHP_EOL; var_dump($retval); var_dump($callinfo); } } // 錯誤回調(diào) function callError() { echo '發(fā)送rpc出錯' . PHP_EOL; } // 錯誤回掉函數(shù), 如果設(shè)置了, 那么Yar在出錯的時候會調(diào)用這個回掉函數(shù) function loopError() { echo '發(fā)送rpc出錯' . PHP_EOL; }
看完上述內(nèi)容,你們對如何進(jìn)行Yar并行的RPC框架使用分析有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
新聞名稱:如何進(jìn)行Yar并行的RPC框架使用分析
網(wǎng)頁URL:http://chinadenli.net/article14/gidige.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、品牌網(wǎng)站制作、微信小程序、企業(yè)建站、網(wǎng)站設(shè)計公司、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)