poplary/lumen-hprose 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

poplary/lumen-hprose

Composer 安装命令:

composer require poplary/lumen-hprose

包简介

Hprose for Lumen

关键字:

README 文档

README

安装

直接使用

composer require poplary/lumen-hprose

使用lumen配置

  1. 在 bootstrap/app.php 注册 ServiceProvider

    $app->register(\Poplary\LumenHprose\ServiceProvider::class);
  2. 配置.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
    
  3. 创建配置路由文件:

    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官方文档介绍 链接

发布远程调用方法 getUserByNameupdate

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'];
}

中间件

中间件分为四种,FilterBeforeFilterHandlerAfterFilterHandlerInvokeHandler.

  • Filter 的使用可以查看 11 Hprose 过滤器

  • BeforeFilterHandlerAfterFilterHandlerInvokeHandler 有对应的接口,存放在 ./src/Middleware/Contracts 目录中,新建中间件时,需要实现对应的接口。相关的使用可以查看 12 Hprose 中间件

  • 中间件需要注意加载的顺序,具体配置在 ./config/hprose.phpmiddleware 数组中。

启动服务

php artisan hprose:server

更新了路由后需要重新启动服务

Demo 测试

php artisan hprose:client:demo

poplary/lumen-hprose 适用场景与选型建议

poplary/lumen-hprose 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.09k 次下载、GitHub Stars 达 2, 最近一次更新时间为 2020 年 08 月 13 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「Hprose」 「lumen」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 poplary/lumen-hprose 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 poplary/lumen-hprose 我们能提供哪些服务?
定制开发 / 二次开发

基于 poplary/lumen-hprose 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 1.09k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 18
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-08-13