laravel-hprose(rpc框架)

biu發表於2018-08-25

Laravel-hprose

基於 hprose/hprose-php 開發的Laravel擴充套件:laravel-hprose

版本要求

Laravel>=5.2

安裝

composer require "zhuqipeng/laravel-hprose:v1.0-alpha"

或者編輯composer.json

"require": {
    "zhuqipeng/laravel-hprose": "v1.0-alpha"
}

配置

  1. 在 config/app.php 註冊 ServiceProvider 和 Facade (Laravel 5.5 無需手動註冊)

    `providers` => [
      // ...
    
      ZhuqipengLaravelHproseServiceProvider::class,
    ]
    `aliases` => [
      // ...
    
      `LaravelHproseMethodManage` => ZhuqipengLaravelHproseFacadesHproseMethodManage::class,
    ]
  2. 配置.env檔案

    監聽地址列表,字串json格式陣列

    HPROSE_URIS=["tcp://0.0.0.0:1314"]

    是否啟用demo方法,true開啟 false關閉,開啟後將自動對外釋出一個遠端呼叫方法 demo

    客戶端可呼叫:$client->demo()

    HPROSE_DEMO=true // true or false
  3. 建立配置路由檔案:

    php artisan vendor:publish --provider="ZhuqipengLaravelHproseServiceProvider"

    應用根目錄下的config目錄下會自動生成新檔案hprose.php

    應用根目錄下的routes目錄下會自動生成新檔案rpc.php

使用

路由

laravel 路由的用法相似,基於 dingo/api 的路由程式碼上做了簡單修改

路由檔案

routes/rpc.php

新增路由方法

LaravelHproseRouter::add(string $name, string|callable $action, array $options = []);
  • string $name 可供客戶端遠端呼叫的方法名
  • string|callable $action 類方法,格式:AppControllersUser@update
  • array $options 是一個關聯陣列,它裡面包含了一些對該服務函式的特殊設定,詳情請參考hprose-php官方文件介紹 連結

釋出遠端呼叫方法 getUserByNameupdate

LaravelHproseRouter::add(`getUserByName`, function ($name) {
    return `name: ` . $name;
});

LaravelHproseRouter::add(`userUpdate`, `AppControllersUser@update`, [`model` => HproseResultMode::Normal]);

控制器

<?php

namespace AppControllers;

class User
{
    public function update($name)
    {
        return `update name: ` . $name;
    }
}

客戶端呼叫

$client->getUserByName(`zhuqipeng`);
$client->userUpdate(`zhuqipeng`);

路由組

LaravelHproseRouter::group(array $attributes, callable $callback);
  • array $attributes 屬性 [`namespace` => “, `prefix` => “]
  • callable $callback 回撥函式
LaravelHproseRouter::group([`namespace` => `AppControllers`], function ($route) {
    $route->add(`getUserByName`, function ($name) {
        return `name: ` . $name;
    });

    $route->add(`userUpdate`, `User@update`);
});

客戶端呼叫

$client->getUserByName(`zhuqipeng`);
$client->userUpdate(`zhuqipeng`);

字首

LaravelHproseRouter::group([`namespace` => `AppControllers`, `prefix` => `user`], function ($route) {
    $route->add(`getByName`, function ($name) {
        return `name: ` . $name;
    });

    $route->add(`update`, `User@update`);
});

客戶端呼叫

$client->user->getByName(`zhuqipeng`);
$client->user->update(`zhuqipeng`);
// 或者
$client->user_getByName(`zhuqipeng`);
$client->user_update(`zhuqipeng`);

啟動服務

php artisan hprose:socket_server

相關文章