下面由laravel教程欄目給大家介紹關(guān)于 laravel hprose rpc 服務(wù),希望對需要的朋友有所幫助!
Laravel Hprose RPC 服務(wù)
開源地址:https://github.com/flc1125/laravel-hprose
該項目支持 Laravel 及非 Laravel 項目使用,支持 ?php >= 5.3 版本語法
注: 以下內(nèi)容,默認(rèn)你對 Hprose 已經(jīng)有了一定了解。內(nèi)容基于 Laravel 項目介紹。
安裝
-
環(huán)境依賴 C 擴展 hprose,詳見:Hprose 官網(wǎng)、Hprose Pecl 擴展
服務(wù)端安裝即可,客戶端可不安裝
pecl install hprose
-
安裝擴展包
composer require flc/laravel-hprose
配置
服務(wù)提供者與門面
Laravel >= 5.5 已增加包自動發(fā)現(xiàn)。舊版本,請手動設(shè)置
-
在 config/app.php 文件下加入服務(wù)提供者
'providers' => [ ... FlcLaravelHproseHproseServiceProvider::class, ]
-
在 config/app.php 文件下加入門面
'aliases' => [ ... 'HproseRoute' => FlcLaravelHproseFacadesHproseRoute::class, 'HproseServer' => FlcLaravelHproseFacadesHproseServer::class, 'HproseClient' => FlcLaravelHproseFacadesHproseClient::class, ]
初始化文件
php artisan hprose:generator
執(zhí)行完成后,會分別生成以下文件:
- 路由服務(wù)提供者:app/Providers/HproseRouteServiceProvider.php
-
路由文件:routes/hprose.php (該路由文件非 Laravel 路由,下文簡稱 Hprose 路由)
Hprose 路由控制器根目錄默認(rèn)在:app/Http/Controllers/Hprose 目錄下,可自行在 app/Providers/HproseRouteServiceProvider.php 調(diào)整
在 config/app.php 文件下加入默認(rèn)的 Hprose 路由服務(wù)提供者
'providers' => [ ... appProvidersHproseRouteServiceProvider::class, ]
發(fā)布配置
php artisan vendor:publish --provider="FlcLaravelHproseHproseServiceProvider"
執(zhí)行后,會生成配置文件路徑:/config/hprose.php
使用
配置說明
配置文件路徑:/config/hprose.php
<?php return [ 'server' => [ 'default' => 'http', 'connections' => [ 'http' => [ 'protocol' => 'http', ], ], ], 'client' => [ 'default' => 'http', 'connections' => array( 'http' => array( 'protocol' => 'http', 'uri' => 'http://192.168.2.67:9001/api/server', // 此處為服務(wù)端的連接地址 'async' => false, ), ), ] ];
目前版本,除客戶端配置中的遠(yuǎn)程服務(wù)器地址外,其他配置默認(rèn)即可
其他均為后續(xù)支持 swoole-http、tcp、websocket 等,做提前架設(shè)
服務(wù)端
增加一個 Laravel 路由,用于啟動 Http 服務(wù),如:
<?php Route::any('hprose-server', 'HproseController@server');
對應(yīng)控制器:
<?php namespace AppHttpControllers; use HproseServer; use HproseRoute; class HproseController { public function server() { HproseServer::setRouter(HproseRoute::getRouter())->start(); } }
訪問:http://localhost/hprose-server
Hprose 路由配置
<?php HproseRoute::add('tests', 'Controller@tests'); HproseRoute::add('tests_one', 'Controller@tests')->option(['...']);
Controller@tests 的方法自行定義
客戶端
<?php namespace AppHttpControllers; use HproseClient; class HproseController { public function client() { $result = HproseClient::tests('tests'); $result = HproseClient::connection('other')->tests('tests'); // 其他連接 $result = HproseClient::connection()->tests->one('tests'); print_r($result); } }
非 Laravel 項目使用
服務(wù)端
<?php $router = new FlcLaravelHproseRoutingRouter; $router->group(['prefix' => 'tests', 'namespace' => 'AppControllers'], function ($router) { $router->add('one', 'Controller@one'); $router->add('two', 'Controller@two')->option(['...']); $router->group(['prefix' => 'group'], function ($router) { $router->add('one', 'Controller@group_one'); ... }); }); $app = [ 'config' => [ 'hprose.server.default' => 'http', 'hprose.server.connections' => [ 'http' => [ 'protocol' => 'http', ], ], ], ]; $server = new FlcLaravelHproseServer($app); $server->setRouter($router)->start();
客戶端
<?php $app = [ 'config' => [ 'hprose.client.default' => 'http', 'hprose.client.connections' => [ 'http' => [ 'protocol' => 'http', 'uri' => 'http://localhost/server.php', 'async' => false ] ] ] ]; $client = new FlcLaravelHproseClient($app); print_r($client->tests->one('222').PHP_EOL);