zoukankan      html  css  js  c++  java
  • laravel-hprose(rpc框架)

    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 ```

    原文地址:https://segmentfault.com/a/1190000016145308

  • 相关阅读:
    js如何实现上拉加载更多...
    基于epoll的TP传输层实现
    ActiveMQ简介与安装
    序列化和反序列化实现
    NoSQL之Redis数据库初探
    分布式缓存之memcached--命令测试
    Java正则表达式测试用例
    Java之正则表达式
    Java反射机制练习(增强可扩展性)
    Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
  • 原文地址:https://www.cnblogs.com/lalalagq/p/9973734.html
Copyright © 2011-2022 走看看