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