RPC - 实战

作者: 诺之林 | 来源:发表于2018-09-13 16:03 被阅读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
    

    相关文章

      网友评论

        本文标题:RPC - 实战

        本文链接:https://www.haomeiwen.com/subject/nyavgftx.html