如何用PHP来搭建一个高性能的服务化高性能调用例子?
2021-08-07
前言
长期以来,PHP 被认为不适合作为服务后端,因为标准的应用方法是使用 php-fpm 或 mod。但是随着这些常驻进程模块的出现,PHP已经合格了。
下面我将介绍如何使用PHP构建高性能的面向服务的后端框架并实现一个客户端调用示例。
服务端
现在PHP圈最流行的框架是,是它的简化版php框架性能对比,保留了(依赖注入)、(命令行生成数据表)等优点。
我在服务端使用的框架叫Luke,地址在这里。卢克是一个非官方的分支。它在上层做了一层封装,剥离了用于http的路由,引入。
现在在你的工作目录中执行以下命令来生成项目代码
composer create-project luke/luke=dev-luke rpcserver
cd rpcserver
此时目录下有http.php和.php两个文件,分别对应http服务和服务。现在我们进入/app/Http/,编辑.php文件,添加如下代码
public function show($name)
{
return "Hello $name, this is Luke.";
}
这样我们的服务器就设置好了,现在回到目录执行下面的命令启动服务
php servers/jsonrpc.php start
此时会输出
Workerman[servers/jsonrpc.php] start in DEBUG mode
----------------------- WORKERMAN -----------------------------
Workerman version:3.5.4 PHP version:7.2.1
------------------------ WORKERS -------------------------------
user worker listen processes status
simon none jsonNL://0.0.0.0:8000 1 [OK]
----------------------------------------------------------------
表示服务运行正常。
此示例仅适用于一个任务流程。更多设置和守护进程方法请查看文档
客户
现在我们回到项目根目录,再打开一个,输入以下命令新建一个客户端目录并导入模块
mkdir client
cd client
composer require luke/client
此时/luke/目录下已经有.php和test.php两个文件,分别是配置和客户端的例子。忽略它们,在项目目录下新建一个test.php文件,输入如下代码保存
[
'hosts' => ['127.0.0.1:8000']
]
];
Client::config($config);
$client = Client::instance("Example");
$ret = $client->show('开发者');
var_dump($ret);
立即执行
php test.php
如果你看到输出
array(1) {
'result' =>
string(30) "Hello 开发者, this is Luke."
}
恭喜!你的 rpc 服务器和客户端已经设置好了。现在将其应用到官方项目中。
和
作为PHP的常驻程序,两者都很优秀,在社区的活跃度也比较高。但是因为两者的性能差不多,而且都是用纯PHP开发的,代码更可控,所以Luke选择了。不过两者的调用方式很接近,只要稍微修改一下代码就可以改用了。
并发性能可以参考这里
后记
在生产环境中使用面向服务的架构。除了协议,通信部分还必须注意加密。 Luke的这部分暂未提供php框架性能对比,用户可以通过简单的加密算法自行实现。
当服务比较多时,还需要加入自动发现的功能。这一点在 Luke 的项目主页上提供了一些想法。