Hprose

RPC - 实战

2018-09-13  本文已影响97人  诺之林

本文的示例代码参考rpc-hprose

目录

Server

startup

composer create-project laravel/laravel server  "5.5.*" --prefer-dist && cd server

composer require lao-liu/laravel-hprose
vim ./config/app.php
'providers' => [
    Laoliu\LaravelHprose\HproseServiceProvider::class,
];

'aliases' => [
    'RpcClient'    => Laoliu\LaravelHprose\HproseClientFacade::class,
    'RpcServer'    => Laoliu\LaravelHprose\HproseServerFacade::class,
    'RpcService'   => Laoliu\LaravelHprose\HproseServiceFacade::class,
];
php artisan vendor:publish --provider="Laoliu\LaravelHprose\HproseServiceProvider"

service

mkdir app/Services

vim app/Services/HelloService.php
<?php

namespace App\Services;

class HelloService
{
    public function hello($data)
    {
        return 'hello: ' . $data;
    }
}

route

vim routes/web.php
<?php

Route::get('/', function () {
    return view('welcome');
});

Route::any('/rpc', function () {
    $server = app('RpcServer');
    $server->addFilter(new Hprose\Filter\JSONRPC\ServiceFilter());
    $server->addInstanceMethods(new \App\Services\HelloService());
    $server->start();
});
vim app/Http/Middleware/VerifyCsrfToken.php
<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    protected $except = [
        '/rpc'
    ];
}
php artisan serve # http://127.0.0.1:8000

关于跨语言RPC框架hprose详细介绍 可以参考hprose

Client

startup

egg-init --type=simple client

cd client && cnpm i

cnpm i --save hprose

controller

vim app/controller/home.js
'use strict';

const Controller = require('egg').Controller;
const hprose = require('hprose');

class HomeController extends Controller {
    async index() {
        this.ctx.body = 'hi, egg';
    }

    async hello() {
        const client = hprose.Client.create('http://localhost:8000/rpc', ['hello']);
        const result = await client.hello('world');
        this.ctx.body = result;
    }
}

module.exports = HomeController;

route

vim app/router.js
'use strict';

module.exports = app => {
    const { router, controller } = app;
    router.get('/', controller.home.index);
    router.get('/hello', controller.home.hello);
};
npm run dev # http://127.0.0.1:7001
curl 127.0.0.1:7001/hello # hello: world
上一篇 下一篇

猜你喜欢

热点阅读