共計 2239 個字符,預計需要花費 6 分鐘才能閱讀完成。
今天就跟大家聊聊有關如何進行 Yar 并行的 RPC 框架使用分析,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
前言:
RPC,就是 Remote Procedure Call 的簡稱呀,翻譯成中文就是遠程過程調用
RPC 要解決的兩個問題:
解決分布式系統中,服務之間的調用問題。
遠程調用時,要能夠像本地調用一樣方便,讓調用者感知不到遠程調用的邏輯
如果模仿 B / S 架構的調用方式,每次調用時,都需要寫一串發起 http 請求的代碼。比如 new Curl()… 之類的,能不能像本地調用一樣,去發起遠程調用,讓使用者感知不到遠程調用的過程。
實際情況下,RPC 很少用到 http 協議來進行數據傳輸,畢竟我只是想傳輸一下數據而已,何必動用到一個文本傳輸的應用層協議。為什么不直接使用二進制傳輸。
安裝:
$ pecl install yar
$ pecl install msgpack
服務端代碼:
?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 = 短信內容)
{ 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
// 一、直接調用
//$client = new Yar_Client( http://192.168.2.138/api/
//$client- SetOpt(YAR_OPT_CONNECT_TIMEOUT, 1000);
//$result = $client- sendSms( 18234065200 , 我是短信內容
//echo $result;
// 二、并行調用
// public static call ( string $uri , string $method [, array $parameters [, callable $callback [, callable $error_callback [, array $options ]]]] )
// callback 回掉函數, 在遠程服務的返回到達的時候被 Yar 調用, 從而可以處理返回內容 如果沒有設置則調用 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]);
// 發送請求
// public static loop ([ callable $callback [, callable $error_callback ]] )
Yar_Concurrent_Client::loop( loopCallback , loopError
function callback($retval, $callinfo)
echo call 自己的回調: . $callinfo[method] . 方法返回數據 . $retval . PHP_EOL;
// 錯誤回掉函數, 如果設置了, Yar 在發送出所有的請求之后立即調用一次這個回掉函數 (此時還沒有任何請求返回), 調用的時候 $callinfo 參數是 NULL
function loopCallback($retval, $callinfo)
if (is_null($callinfo)) {
echo 所有 rpc 請求發送完畢調用 . PHP_EOL;
} else {
echo 調用成功后返回 . PHP_EOL;
var_dump($retval);
var_dump($callinfo);
}
// 錯誤回調
function callError()
echo 發送 rpc 出錯 . PHP_EOL;
// 錯誤回掉函數, 如果設置了, 那么 Yar 在出錯的時候會調用這個回掉函數
function loopError()
echo 發送 rpc 出錯 . PHP_EOL;
}
看完上述內容,你們對如何進行 Yar 并行的 RPC 框架使用分析有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。
正文完