文档章节

hporse-laravel-rpc(http,tpc)

MrMyj
 MrMyj
发布于 2018/11/14 10:22
字数 611
阅读 41
收藏 0

laravel 安装 hprose

1安装hprose-php

2laravel http tcp服务启动

3supervisord后台常驻运行

4微服务调用

我这里用的是docker 地址有内部地址请注意替换

1 laravel 安装 hprose

composer require hprose/hprose

php artisan rpc:server:start

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use App\Service\RpcGoodsSerivce;
use Hprose\Socket\Server;

class RpcServerCommand extends Command
{

    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'rpc:server:start';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'rpc服务启动';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * @throws \App\Wechat\WechatException
     */
    public function handle()
    {
        $server = new Server("tcp://0.0.0.0:1314");
        $server->setErrorTypes(E_ALL);
        $server->setDebugEnabled();
        $server->addFunction(function ($a) use ($server) {
            $promise = (new RpcGoodsSerivce())->test($a);
            return $promise;
        }, 'test');
//        $server->addMethod('test', $this);
        $server->addMethod('testb', $this);
        $server->start();
    }

    public function testb($str)
    {
        return (new RpcGoodsSerivce())->testb($str);
    }

}
app/Console/Kernel.php 中添加这类
RpcServerCommand::class,

RpcGoodsSerivce

<?php

namespace App\Service;

use Hprose\Http\Server;

class RpcGoodsSerivce
{
    public function init()
    {
        $server = new Server();
        $server->setCrossDomainEnabled();
        $server->addAccessControlAllowOrigin('*');
        $server->addMethod('test', $this);
        $server->addMethod('testa', $this);
        $server->addMethod('testb', $this);
        $server->addMethod('testdddddd', $this);
        $server->start();
    }

    /**
     * @param $str
     * @return string
     * var client = hprose.Client.create("http://127.0.0.1:8087/api/v1/rpc/wms",["test"]);
     * client.test(d"World!")
     * .then(function(result) {
     * console.log(result);
     * }, function(err) {
     * console.log(err);
     * });
     */
    public function test($str)
    {
        return 'hello' . rand(0, 1000) . $str;
    }

    public function testa($str, array $json)
    {
        return 'helloa' . $str . \GuzzleHttp\json_encode($json);
    }

    public function testb($str)
    {
        return 'hellob' . $str;
    }

    public function testc($str)
    {
        return 'hellov';
    }

    public function testdddddd($str)
    {
        return 'hellovadcasdcasd';
    }


}

routes/api.php

$router->post('rpc/wms', 'RpcController@rpcTest');
$router->post('rpc/gethttp', 'RpcController@rpcGetHttp');
$router->post('rpc/gettcp', 'RpcController@rpcGetTcp');

app/Http/Controllers/API/RpcController.php

<?php

namespace App\Http\Controllers\API;

use App\Http\Controllers\Controller;
use App\Service\RpcGoodsSerivce;
use Hprose\Http\Client as HttpClient;
use Hprose\Client as TcpClient;
use Illuminate\Http\Request;

class RpcController extends Controller
{
    /**
     * http 启动
     * @param Request $request
     */
    public function rpcTest(Request $request)
    {
        $server = new RpcGoodsSerivce();
        $server->init();   //开启服务
    }

    public function rpcGetHttp(Request $request)
    {
        $user = new HttpClient('http://mynginx:8087/api/v1/rpc/wms', false);
        $res[] = $user->isIdempotent();

        $res[] = $user->testa('aaa', array('aaa' => 'ccccc'));
        $res[] = $user->testb('aaa');
        $res[] = $user->testdddddd('aaa');
        return $this->response($res);
    }

    public function rpcGetTcp(Request $request)
    {
        //TODO php artisan rpc:server:start
        $user = TcpClient::create('tcp://127.0.0.1:1314/', false);
        $res[] = $user->test('aaaaaa');
        $res[] = $user->testb('bbbbb');
        return $this->response($res);
    }

}

2后台常驻运行 supervisor

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
pip install -U pip
pip install supervisor
apt-get install supervisor

3 后台常驻运行 supervisor 配置文件

配置文件 /etc/supervisord/conf.d/rpc.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /usr/share/nginx/www/artisan rpc:server:start
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/var/log/supervisor/laravel-queue.log

启动命令

cd /etc/supervisord supervisord -c supervisor.conf

如果启动错误 删除 /var/run/supervisor.sock

常用命令

supervisorctl update
supervisorctl reload
supervisorctl
supervisorctl stop all

4 查看效果

© 著作权归作者所有

共有 人打赏支持
MrMyj
粉丝 12
博文 24
码字总数 8870
作品 0
朝阳
技术主管
私信 提问
基于 swoole 的常驻内存框架 - One-Frame

One - 一个极简的基于swoole常驻内存框架。 背景 在用过框架,发现它的和确实非常好用,但是整体确实有点慢,执行到控制器大于需要耗时60ms左右。于是打算做一个拥有非常好用的路由和orm又非...

意简美
2018/12/17
0
0
基于 swoole 的极简框架 One 1.3.1 发布

主要更新 添加Rpc服务支持内置了http,TCP协议支持 增加Tcp协程客户端连接池 增加 globalData 自增方法 背景 在用过框架,发现它的和确实非常好用,但是整体确实有点慢,执行到控制器大于需要...

意简美
2018/12/17
0
0
有http 请求,为什么还要用rpc调用?

链接:https://www.zhihu.com/question/41609070/answer/191965937 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Content-Type: text/plainContent-Le...

u010325193
2018/05/06
0
0
Laravel大型项目系列教程

Laravel大型项目系列教程(一) 一、简介 本教程将使用Laravel完成一个多用户的博客系统,大概会包含如下内容: - 路由管理。 - 用户管理,如用户注册、修改信息、锁定用户等。 - 文章管理,...

实验楼
2015/01/21
0
10
服务器性能指标:拨开服务器评测体系迷雾

用户总希望有一种简单、高效的度量标准,来量化评价服务器系统,以便作为选型的依据。但实际上,服务器的系统性能很难用一两种指标来衡量。包括 TPC、SPEC、SAP SD、Linpack和HPCC在内的众多...

shezjl
2015/06/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式之路

https://java-design-patterns.com/patterns/ https://www.oodesign.com/ https://www.programering.com/a/MTNxAzMwATY.html https://design-patterns.readthedocs.io/zh_CN/latest/ https:/......

晨猫
今天
1
0
JDK1.8 jar包说明

JDK 1.8 lib:access-bridge-64.jarcharsets.jarcldrdata.jardeploy.jardnsns.jarjaccess.jarjavawa.jarjce.jarjfr.jarjfxrt.jarjfxswt.jarjsse.jarlocaledata.jar......

冷基
今天
1
0
判断用户的icloud是否开启【Swift4.2】

使用icloudkit存储用户私人数据时,必须判断用户的icloud是否开启【Swift4.2】 func isICloudContainerAvailable()-> Bool { if FileManager.default.ubiquityIdentityToken != ni......

叶落花开
今天
2
0
今天的学习

1、执行git add *命令就把改动提交到了暂存区,执行git pull命令将远程仓库的数据拉到当前分支并合并,执行git checkout [branch-name]切换分支 2、执行git commit -m '说明' 命令就把改动提...

墨冥
昨天
0
0
Android4.4 及以下TextView,Button等控件使用矢量图报错

1 问题描述 最近项目开发中,图标资源我尽量使用了矢量图,然而配置了基本的兼容设置,程序在低版本中运行还是出现了问题。 xml布局文件中,在TextView中使用矢量图,比如android:drawableS...

newtrek
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部