资讯专栏INFORMATION COLUMN

laravel-hprose(rpc框架)

incredible / 1363人阅读

摘要:基于开发的扩展版本要求安装或者编辑配置在注册和无需手动注册配置文件监听地址列表,字符串格式数组是否启用方法,开启关闭,开启后将自动对外发布一个远程调用方法客户端可调用创建配置和路由文件应用根目录下的目录下会自动生成新文件

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

发布远程调用方法 getUserByNameupdate

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框架是啥?

    摘要:知乎的点赞,应该还是可以参考的。除了网络通信,还需要有高效的序列化框架,以及一种寻址方式,如果是带会话状态的调用,还需要有会话的状态保持的功能。一般来说,框架实现的架构原理都是类似的。服务端响应主要是服务端业务逻辑实现。 本博客 猫叔的博客,转载请申明出处 在我刚刚了解分布式的时候,经常对RPC和分布式有些混淆,甚至一直以为两者对等,所以我们先看看他们有什么区别? RPC实现了服务消费...

    xietao3 评论0 收藏0
  • RPC框架是啥?

    摘要:知乎的点赞,应该还是可以参考的。除了网络通信,还需要有高效的序列化框架,以及一种寻址方式,如果是带会话状态的调用,还需要有会话的状态保持的功能。一般来说,框架实现的架构原理都是类似的。服务端响应主要是服务端业务逻辑实现。 本博客 猫叔的博客,转载请申明出处 在我刚刚了解分布式的时候,经常对RPC和分布式有些混淆,甚至一直以为两者对等,所以我们先看看他们有什么区别? RPC实现了服务消费...

    didikee 评论0 收藏0
  • RPC框架原理及从零实现系列博客(一):思路篇

    摘要:等之所以支持跨语言,是因为他们自己定义了一套结构化数据存储格式,如的,用于编解码对象,作为各个语言通信的中间协议。 前段时间觉得自己一直用别人的框架,站在巨人的肩膀上,也该自己造造轮子了 一时兴起 就着手写起了RPC框架 这里写了系列博客拿给大家分享下 这篇是开篇的思路篇 项目最终的代码放在了我的github上https://github.com/wephone/Me... 欢迎sta...

    tracy 评论0 收藏0
  • 分布式下的远程通信技术(RPC)的一些理解

    摘要:都是分开部署,单独上线的。序列化毕竟是远程通信,需要将对象转化成二进制流进行传输。服务化架构的演进架构当业务规模很小时,将所有功能都不熟在同一个进程中,通过双机或者负载均衡器实现负债分流此时,分离前后台逻辑的架构是关键。 showImg(https://segmentfault.com/img/bVbiI2F?w=2250&h=1500); 前言 为什么需要RPC,而不是简单的HTTP...

    EastWoodYang 评论0 收藏0

发表评论

0条评论

incredible

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<