適合的讀者:中級程序員
前言
最近因項目需要,接觸了一款名為Hprose的遠程調用框架,它的官方介紹是“一款先進的輕量級、跨語言、跨平臺、無侵入式、高性能動態遠程對象調用引擎庫”。
沒接觸過RPC的同學可以百度一下,這裡就不解釋了。
安裝
這裡使用composer安裝Hprose,在你的項目composer.json文件中加入:
{
"require": {
"hprose/hprose": ">=2.0.0"
}
}
然後執行composer命令
composer update
到這裡就安裝完成啦,composer是不是很好用?
開啟服務端
RPC分服務端和客戶端,我們新建一個server.php,輸入以下代碼
require_once "vendor/autoload.php";
use Hprose\\Http\\Server;
class UserServer
{
public function __construct()
{
$server = new Server();
//添加方法到RPC服務器
$server->addMethod('userInfo', $this);
//運行RPC服務器
$server->start();
}
/**
* 要開放調用的方法
* @return string
*/
public function userInfo($user_id)
{
$users = [];
for ($i = 0; $i < 4; $i++)
$users[$i] = [
'id' => $i+1,
'name'=>'user_'.$i,
'sex'=>rand(0,10)>5?'MM':'GG',
'age'=>rand(16,34)
];
return $users[$user_id];
}
}
new UserServer();
這樣就可以搭建好一個HTTP的RPC服務端了
PHP客戶端調用
我們新建一個client.php,輸入以下代碼
require_once "vendor/autoload.php";
use Hprose\\Http\\Client;
//第二個參數是“是否開啟異步調用”,默認為true(開啟)
$cli = new Client('http://localhost/rose/server.php', false);
var_dump($cli->userInfo(2));
然後運行
看到以上結果,則說明服務端跟PHP客戶端的運行都正確了。
安裝Python端
我們最後來試一下跨語言調用,進入github鏈接下載源碼
https://github.com/hprose/hprose-python
下載以後解壓,在根目錄執行安裝命令
python setup.py install
到這裡就安裝好了
Python客戶端調用
這裡我們來實現在Python端調用PHP端的服務。
在根目錄新建client.py,輸入以下代碼
#!/usr/bin/env python
# encoding: utf-8
import hprose
def main():
\tclient = hprose.HttpClient('http://localhost/rose/server.php')
\tprint(client.userInfo(3))
if __name__ == '__main__':
\tmain()
執行代碼,如下圖所示,獲取到用戶信息。
到這裡就說明Python客戶端調用成功了。
總結
經過實驗以後,Hprose確實是很輕量的一個框架,而且它支持各種語言,有了它,你就可以將項目中不同語言寫的服務聯結起來,算得上是搭建分佈式項目的利器。
這裡附上Hprose的官網以及示例代碼的github鏈接
https://hprose.com
https://github.com/hprose
閱讀更多 搞技術的莊大叔 的文章