摘要:基于开发的扩展版本要求安装或者编辑配置在注册和无需手动注册配置文件监听地址列表,字符串格式数组是否启用方法,开启关闭,开启后将自动对外发布一个远程调用方法客户端可调用创建配置和路由文件应用根目录下的目录下会自动生成新文件
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" => [ // ... ZhuqipengLaravelHproseServiceProvider::class, ]
"aliases" => [ // ... "LaravelHproseMethodManage" => ZhuqipengLaravelHproseFacadesHproseMethodManage::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="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官方文档介绍 链接
发布远程调用方法 getUserByName 和 update
LaravelHproseRouter::add("getUserByName", function ($name) { return "name: " . $name; }); LaravelHproseRouter::add("userUpdate", "AppControllersUser@update", ["model" => HproseResultMode::Normal]);
控制器
客户端调用
$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://www.ucloud.cn/yun/29302.html
摘要:等之所以支持跨语言,是因为他们自己定义了一套结构化数据存储格式,如的,用于编解码对象,作为各个语言通信的中间协议。 前段时间觉得自己一直用别人的框架,站在巨人的肩膀上,也该自己造造轮子了 一时兴起 就着手写起了RPC框架 这里写了系列博客拿给大家分享下 这篇是开篇的思路篇 项目最终的代码放在了我的github上https://github.com/wephone/Me... 欢迎sta...
摘要:都是分开部署,单独上线的。序列化毕竟是远程通信,需要将对象转化成二进制流进行传输。服务化架构的演进架构当业务规模很小时,将所有功能都不熟在同一个进程中,通过双机或者负载均衡器实现负债分流此时,分离前后台逻辑的架构是关键。 showImg(https://segmentfault.com/img/bVbiI2F?w=2250&h=1500); 前言 为什么需要RPC,而不是简单的HTTP...
阅读 1739·2023-04-26 01:41
阅读 3025·2021-11-23 09:51
阅读 2696·2021-10-09 09:43
阅读 8814·2021-09-22 15:13
阅读 2386·2021-09-07 09:59
阅读 2595·2019-08-30 15:44
阅读 1070·2019-08-30 12:45
阅读 2576·2019-08-30 12:43