「RPC」「分佈式」使用Hprose實現PHP與Python的遠程過程調用

適合的讀者:中級程序員

前言

最近因項目需要,接觸了一款名為Hprose的遠程調用框架,它的官方介紹是“一款先進的輕量級、跨語言、跨平臺、無侵入式、高性能動態遠程對象調用引擎庫”。

沒接觸過RPC的同學可以百度一下,這裡就不解釋了。

「RPC」「分佈式」使用Hprose實現PHP與Python的遠程過程調用

圖片來源:https://hprose.com/

安裝

這裡使用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));

然後運行

「RPC」「分佈式」使用Hprose實現PHP與Python的遠程過程調用

PHP客戶端執行結果

看到以上結果,則說明服務端跟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()

執行代碼,如下圖所示,獲取到用戶信息。

「RPC」「分佈式」使用Hprose實現PHP與Python的遠程過程調用

Python客戶端執行結果

到這裡就說明Python客戶端調用成功了。

總結

經過實驗以後,Hprose確實是很輕量的一個框架,而且它支持各種語言,有了它,你就可以將項目中不同語言寫的服務聯結起來,算得上是搭建分佈式項目的利器。

這裡附上Hprose的官網以及示例代碼的github鏈接

https://hprose.com

https://github.com/hprose


分享到:


相關文章: