poplary / lumen-hprose
Hprose for Lumen
0.1.6
2020-12-17 10:08 UTC
Requires
- php: >=7.2.5
- ext-json: *
- ext-swoole: *
- hprose/hprose: ^2.0
- hprose/hprose-swoole: ^2.0
- laravel/lumen-framework: ^7.0|^8.0
- nunomaduro/collision: ^5.1
README
安装
直接使用
composer require poplary/lumen-hprose
使用lumen配置
-
在 bootstrap/app.php 注册 ServiceProvider
$app->register(\Poplary\LumenHprose\ServiceProvider::class);
-
配置.env文件
// 服务的名称 HPROSE_SERVICE=product // 是否开启 debug HPROSE_DEBUG=true // Hprose 服务启用方式,可选 socket 和 swoole,选择 swoole 时需要安装 swoole 扩展 HPROSE_SERVER=socket // 监听的 TCP 端口 HPROSE_URI=tcp://0.0.0.0:8889
-
创建
配置
和路由
文件:cp ./vendor/poplary/lumen-hprose/config/hprose.php ./config/hprose.php cp ./vendor/poplary/lumen-hprose/routes/hprose.php ./routes/hprose.php
使用
路由
路由文件
routes/hprose.php
添加路由方法
use Poplary\LumenHprose\Facades\Router; Router::add(string $name, string|callable $action, array $options = []);
- string $name 可供客户端远程调用的方法名
- string|callable $action 类方法,格式:App\Controllers\User@update
- array $options 是一个关联数组,它里面包含了一些对该服务函数的特殊设置,详情请参考hprose-php官方文档介绍 链接
发布远程调用方法 getUserByName
和 update
Router::add('getServiceName', 'Poplary\LumenHprose\Controllers\DemoController@getServiceName');
控制器
<?php namespace Poplary\LumenHprose\Controllers; /** * Class DemoController. */ class DemoController { /** * @return string */ public function getServiceName(): string { return config('hprose.service'); } }
客户端调用 客户端可以只安装 Hprose
$client = new \Hprose\Socket\Client('tcp://127.0.0.1:8889', false); echo $client->getServiceName();
路由组
Router::group(array $attributes, callable $callback);
- array $attributes 属性 ['namespace' => '', 'prefix' => '']
- callable $callback 回调函数
Router::group(['namespace' => 'Poplary\LumenHprose\Controllers'], function ($route) { $route->add('getServiceName', 'DemoController@getServiceName'); });
客户端调用
echo $client->getServiceName();
前缀
Router::group(['namespace' => 'Poplary\LumenHprose\Controllers', 'prefix' => 'demo'], function ($route) { $route->add('getServiceName', 'DemoController@getServiceName'); });
客户端调用
echo $client->demo->getServiceName(); // 或者 echo $client->demo_getServiceName();
如果服务端出现 Exception ,因为 Hprose 没有返回 code,需要将code 合并到message用json方式包裹返回
try{ $client->user->getServiceName(); }catch(\Exception $e){ $info = json_decode($e->getMessage(),true); $message = $info['message']; $code = $info['code']; }
中间件
中间件分为四种,Filter
,BeforeFilterHandler
,AfterFilterHandler
,InvokeHandler
.
-
Filter
的使用可以查看 11 Hprose 过滤器。 -
BeforeFilterHandler
,AfterFilterHandler
,InvokeHandler
有对应的接口,存放在./src/Middleware/Contracts
目录中,新建中间件时,需要实现对应的接口。相关的使用可以查看 12 Hprose 中间件。 -
中间件需要注意加载的顺序,具体配置在
./config/hprose.php
的middleware
数组中。
启动服务
php artisan hprose:server
更新了路由后需要重新启动服务
Demo 测试
php artisan hprose:client:demo