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"
}
配置
在 config/app.php 注册 ServiceProvider 和 Facade (Laravel 5.5 无需手动注册)
'providers' => [
// ... Zhuqipeng\LaravelHprose\ServiceProvider::class,
]
'aliases' => [
// ... 'LaravelHproseMethodManage' => Zhuqipeng\LaravelHprose\Facades\HproseMethodManage::class,
]
配置.env文件
监听地址列表,字符串json格式数组
HPROSE_URIS=["tcp://0.0.0.0:1314"]
是否启用demo方法,true开启 false关闭,开启后将自动对外发布一个远程调用方法
demo客户端可调用:$client->demo()
HPROSE_DEMO=true // true or false
创建
配置和路由文件:```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官方文档介绍 链接
发布远程调用方法 getUserByName 和 update
\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框架)的更多相关文章
- NetCore平台下使用RPC框架Hprose
NetCore下使用RPC框架Hprose https://www.jianshu.com/p/c903fca44d5d Hprose是国内非常优秀的RPC框架,和其它RPC框架比较起来,其它框架一般 ...
- php中流行的rpc框架详解
什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call) 那什么是远程调用? 我的官方群点击此处. 通常我们调用一个php中的方法,比如这样一个函数方 ...
- 微博轻量级RPC框架Motan
Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用. ...
- 基于 SOA 概念 RPC 框架 的 消息中心 云部署 设计 漫谈
一.背景 假设有一个系统的最大并发量有2000TPS左右.同时该系统有闲时和忙时,希望可以随时进行拓展和削减服务能力,以节省服务器费用开销. 该系统能提供站内消息.短信.app消息.邮箱的一个消息系统 ...
- 微博轻量级RPC框架Motan正式开源:支撑千亿调用
支撑微博千亿调用的轻量级 RPC 框架 Motan 正式开源了,项目地址为https://github.com/weibocom/motan. 微博轻量级RPC框架Motan正式开源 Motan 是微 ...
- 性能工具之Jmeter压测Hprose RPC服务
概述 Hprose(High Performance Remote Object Service Engine),国人开发的一个远程方法调用的开源框架.它是一个先进的轻量级的跨语言跨平台面向对象的高性 ...
- 这次我设计了一款TPS百万级别的分布式、高性能、可扩展的RPC框架
作者:冰河 博客地址:https://binghe001.github.io 大家好,我是冰河~~ 没错,这次冰河又要搞事情了,这次准备下手的是RPC框架项目.为什么要对RPC框架项目下手呢,因为在如 ...
- RPC框架实现 - 通信协议篇
RPC(Remote Procedure Call,远程过程调用)框架是分布式服务的基石,实现RPC框架需要考虑方方面面.其对业务隐藏了底层通信过程(TCP/UDP.打包/解包.序列化/反序列化),使 ...
- 一个轻量级分布式RPC框架--NettyRpc
1.背景 最近在搜索Netty和Zookeeper方面的文章时,看到了这篇文章<轻量级分布式 RPC 框架>,作者用Zookeeper.Netty和Spring写了一个轻量级的分布式RPC ...
- RPC框架性能基本比较测试
RPC框架:gRPC.Thrift.Wildfly.Dubbo 原文链接:http://www.open-open.com/lib/view/open1426302068107.html gRPC是G ...
随机推荐
- Cookie && Session && Token
Cookies Cookie的由来: HTTP 本身是一个无状态的 request/response 协议. server接收一个来自client的request, 处理完以后返回一个response ...
- POJ题目1947 Rebuilding Roads(树形dp)
Rebuilding Roads Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 9957 Accepted: 4537 ...
- Java 递归、尾递归、非递归、栈 处理 三角数问题
import java.io.BufferedReader; import java.io.InputStreamReader; //1,3,6,10,15...n 三角数 /* * # 1 * ## ...
- Mysql查看sql是否走事务
登陆进入server [root@gzmtest_25 ~]# su - mysql [mysql@gzmtest_25 ~]$ mysql.local Welcome to the MySQL mo ...
- 泛型和面向对象C++
1. 在类内部定义的函数默觉得inline,内联函数应该在头文件里定义,由于其定义对编译器必须是可见的,以便编译器可以在调用点内联展开该函数的代码. 此时,仅有函数原型是不够的. 2.assert 3 ...
- 《TCP/IP具体解释》读书笔记(21章)-TCP的超时与重传
TCP提供可靠的运输层. 它使用的方法之中的一个就是确认从还有一端收到的数据.但数据和确认都有可能会丢失.TCP通过在发送时设置一个定时器来解决这样的问题.假设当定时器溢出时还没有收到确认,它就重传该 ...
- luogu1006 传纸条
题目大意 小渊坐在矩阵的左上角,坐标 (1,1 ),小轩坐在矩阵的右下角,坐标 (m,n) .从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递. 在活动进行中,小 ...
- bin/sh^M:损坏的解释器: 没有那个文件或目录
脚本文件保存时使用了DOS格式,用DOS2UNIX转为UNIX格式,也可以用vim打开,用:set ff=unix转换.不要在 Windows下编辑脚本文件,否则经常会遇到这种问题. 代码:sed - ...
- 【转载】cocos2dx 中 Android NDK 加载动态库的问题
原文地址:http://blog.csdn.net/sozell/article/details/10551309 cocos2dx 中 Android NDK 加载动态库的问题 闲聊 最近在接入各 ...
- C# 对象克隆,DataTable转LIST
public class ConvertHelper<T> where T : new() { private static string module = "ConvertHe ...