RPC(Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想。
解决问题:
解决分布式系统中,服务之间的调用问题。
远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。
Think-Swoole中已经实现了的基于TCP的PRC,这样我们使用传统型框架也可以做简单的分布式架构应用了。
一、配置服务端
1,修改 config/swoole.php
'rpc' => [ 'server' => [ 'enable' => true, 'port' => 9000, 'services' => [ \app\rpc\service\UserService::class ], ], 'client' => [ ], ],
2,新增rpc目录结构如下:
3,定义接口抽象方法
<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\rpc\interfaces;interface UserInterface{ public function add($name);}
4,实现接口方法
<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\rpc\service;use app\rpc\interfaces\UserInterface;class UserService implements UserInterface{ public function add($name) { return "您要新增的用户名是:{$name}"; }}
服务端的操作就已经完成。 可以开启swoole 命令 php think swoole start
二、配置客户端
1,修改 config/swoole.php
'rpc' => [
'server' => [
'enable' => false,
'port' => 9000,
'services' => [
],
],
'client' => [
'userservice'=>[
//RPC服务端的ip地址
'host' => '127.0.0.1',
//RPC服务端的端口
'port' => 9000
]
],
],
2,生成RPC服务接口
php think rpc:interface
会在app目录下生成一个rpc.php的文件,它就是RPC服务接口文件
文件内容大致:
<?php/**
* This file is auto-generated.
*/declare(strict_types=1);namespace rpc\contract\userservice;interface UserInterface{
public function add($name);}return ['userservice' => ['rpc\contract\userservice\UserInterface']];
注意return中就是每个服务接口的命名空间;在控制器中使用该命名空间实例对象就可以调用
3,Controller调用
<?php// +----------------------------------------------------------------------// | najing [ 通用后台管理系统 ]// +----------------------------------------------------------------------// | Copyright (c) 2020 http://www.najingquan.com ;All rights reserved.// +----------------------------------------------------------------------// | Author: 救火队队长namespace app\controller;use app\BaseController;use rpc\contract\userservice\UserInterface;class User extends BaseController{
public function add(UserInterface $user)
{
echo $user->add("救火队队长");
}}
4,浏览器访问客户端Controller
6收藏点击回复