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' => [
    // ... Zhuqipeng\LaravelHprose\ServiceProvider::class,
    ]
    'aliases' => [
    // ... 'LaravelHproseMethodManage' => Zhuqipeng\LaravelHprose\Facades\HproseMethodManage::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="Zhuqipeng\LaravelHprose\ServiceProvider"
    ```

    应用根目录下的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', 'App\Controllers\User@update', ['model' => \Hprose\ResultMode::Normal]);

控制器

<?php

namespace App\Controllers;

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' => 'App\Controllers'], function ($route) {
$route->add('getUserByName', function ($name) {
return 'name: ' . $name;
}); $route->add('userUpdate', 'User@update');
});

客户端调用

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

前缀

\LaravelHproseRouter::group(['namespace' => 'App\Controllers', '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

laravel-hprose(rpc框架)的更多相关文章

  1. NetCore平台下使用RPC框架Hprose

    NetCore下使用RPC框架Hprose https://www.jianshu.com/p/c903fca44d5d Hprose是国内非常优秀的RPC框架,和其它RPC框架比较起来,其它框架一般 ...

  2. php中流行的rpc框架详解

    什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 我的官方群点击此处. 通常我们调用一个php中的方法,比如这样一个函数方 ...

  3. 微博轻量级RPC框架Motan

    Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用. ...

  4. 基于 SOA 概念 RPC 框架 的 消息中心 云部署 设计 漫谈

    一.背景 假设有一个系统的最大并发量有2000TPS左右.同时该系统有闲时和忙时,希望可以随时进行拓展和削减服务能力,以节省服务器费用开销. 该系统能提供站内消息.短信.app消息.邮箱的一个消息系统 ...

  5. 微博轻量级RPC框架Motan正式开源:支撑千亿调用

    支撑微博千亿调用的轻量级 RPC 框架 Motan 正式开源了,项目地址为https://github.com/weibocom/motan. 微博轻量级RPC框架Motan正式开源 Motan 是微 ...

  6. 性能工具之Jmeter压测Hprose RPC服务

    概述 Hprose(High Performance Remote Object Service Engine),国人开发的一个远程方法调用的开源框架.它是一个先进的轻量级的跨语言跨平台面向对象的高性 ...

  7. 这次我设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架

    作者:冰河 博客地址:https://binghe001.github.io 大家好,我是冰河~~ 没错,这次冰河又要搞事情了,这次准备下手的是RPC框架项目.为什么要对RPC框架项目下手呢,因为在如 ...

  8. RPC框架实现 - 通信协议篇

    RPC(Remote Procedure Call,远程过程调用)框架是分布式服务的基石,实现RPC框架需要考虑方方面面.其对业务隐藏了底层通信过程(TCP/UDP.打包/解包.序列化/反序列化),使 ...

  9. 一个轻量级分布式RPC框架--NettyRpc

    1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...

  10. RPC框架性能基本比较测试

    RPC框架:gRPC.Thrift.Wildfly.Dubbo 原文链接:http://www.open-open.com/lib/view/open1426302068107.html gRPC是G ...

随机推荐

  1. CSS3:box-sizing:不再为盒子模型而烦恼

    题外话: W3C奉行的标准,就是content-box,就是须要计算边框,填充还有内容的;可是就我个人而言, 比較喜欢的是传统IE6时候的怪异模式,不用考虑容器是否会被撑开(打乱布局); 盒子模型差异 ...

  2. 2749: [HAOI2012]外星人

    首先像我一样把柿子画出来或者看下hint 你就会发现其实是多了个p-1这样的东东 然后除非是2他们都是偶数,而2就直接到0了 算一下2出现的次数就好 #include<cstdio> #i ...

  3. mysql数据库操作(3)

    1.在查询结果中不显示重复记录 查询时不显示重复记录主要应用了 DISTINCT 关键字,该关键字用于删除重复记录. 在实现查询操作时,如果查询的选择列表中包含一个表的主键,那么每个查询中的记录都将是 ...

  4. hdoj--1418--抱歉(水题)

     抱歉 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  5. 原生JS---6

    原生js学习笔记6——事件 事件对象 鼠标事件 event.clientX在可视区中,鼠标点击的x坐标 event.clientY在可视区中,鼠标点击的y坐标 示例: <!DOCTYPE htm ...

  6. BZOJ 4525 二分

    思路: 满足二分性质... 二分一下      就完了 //By SiriusRen #include <cstdio> #include <algorithm> using ...

  7. bug,实现类未找到service

  8. Dubbo的@Reference和@Service说明---1Reference用在消费者2Service用在提供者【import com.alibaba.dubbo.config.annotation.Service;】

    @Reference 用在消费端,表明使用的是服务端的什么服务@RestControllerpublic class RemoteUserController { @Reference(version ...

  9. IIS7部署网站的一些细节问题。

    1.不能在此路径中使用此配置节.如果在父级别上锁定了该节,便会出现这种情况. 这个错误的原因是在 IIS 7中 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项.要取消锁定可以以 ...

  10. CXF-JAX-RS开发(一)入门案例

    一.简介 资源驱动.基于HTTP协议[按照标准指定URL,就可以访问数据]以XML|JSON格式传输数据. 二.quickstart 1.创建maven project[Packaging:jar] ...