Swoft 踩坑笔记十五 - RPC 创建服务端与客户端

17 篇文章 4 订阅

RPC的作用就是远程调用,也就是接口。

需要准备的

  1. 俩台虚拟机,主要用来测试不同ip的。也不是必须,只是便于理解。
  2. 俩台虚拟机都要有一份swoft。

我们先使用swoft里的domo做讲解,然后再自己做一遍。

此时
虚拟机A的IP:192.168.247.140
虚拟机B的IP:192.168.247.141

虚拟机A (客户端)

首先,我们打开这三个文件
在这里插入图片描述
图中88行那改成你虚拟机B的ip和端口。

DemoInterface.php:定义接口
DemoService.php:实现定义的接口
这俩个让你打开是让你看的,无需做修改,你只需修改 .env 里的,改好重启服务。
DemoService.php里的类注释有一个@Service(),这个是配置服务端版本号的,@Service()不填默认为0。用法看下面的客户端。

至此,服务端建立。
啥是服务端?
就是提供服务的。调用这个服务的叫做客户端。

虚拟机B(服务端)

虚拟机只需启动就可以了

# cd swoft/bin/
# php swoft rpc:start

浏览器访问(这个页面是一个普通的控制器)
修改客户端 .env HTTP_PORT=8081

http://192.168.247.140:8081/rpc/call

在这里插入图片描述
至此,客户端也成功调用到了。
你想知道是不是真的成功了?那很简单,你把服务端的swoft停掉再访问就知道啦。
下面打开的是上面访问的控制器
在这里插入图片描述
@Reference(name=“user”, version=“1.0.1”)
name:服务名称
version:服务版本号

好了,我们来做服务端和客户端吧!

服务端说明

需要定义一个接口,然后实现这个接口。

定义接口

创建swoft/app/Lib/TestInterface.php

<?php

namespace App\Lib;

use Swoft\Core\ResultInterface;

interface TestInterface
{
    public function getStr(string $str);

}

实现接口
创建 swoft/app/Services/TestService.php

<?php

namespace App\Services;

use App\Lib\TestInterface;
use Swoft\Rpc\Server\Bean\Annotation\Service;

/**
 * @Service()
 */
class TestService implements TestInterface
{
    public function getStr(string $str)
    {
        return ['我是服务端的' . $str];
    }

}

客户端说明

1、从服务端拷贝一份TestInterface.php 到客户端swoft/app/Lib/TestInterface.php,也就是把文件拉进去
2、将三个User的拷贝一份,把User的都改成Test
和服务端不同的是客户端需要有连接池和熔断器。
连接池和熔断器的名称要一样。
连接池由两部分组成,“连接池”和“连接池配置”。
在这里插入图片描述
TestBreaker.php改@Breaker(“user”)为@Breaker(“test”),改类名
TestServicePool.php改@Pool(name=“user”)为@Pool(name=“test”),改类名
TestPoolConfig.php 改类名

3、创建测试控制器 swoft/app/Controllers/TestController.php

<?php

namespace App\Controllers;

use Swoft\Http\Message\Server\Request;
use Swoft\Http\Server\Bean\Annotation\Controller;
use Swoft\Http\Server\Bean\Annotation\RequestMapping;
use Swoft\Http\Server\Bean\Annotation\RequestMethod;
use Swoft\Rpc\Client\Bean\Annotation\Reference;
use App\Lib\TestInterface;
/**
 * Class TestController
 * @Controller("/test")
 */
class TestController
{
    /**
     * @Reference(name="test")
     *
     * @var TestInterface
     */
    private $testService;

    /**
     * @RequestMapping(route="test")
     */
    public function test()
    {
        $result  = $this->testService->getStr('-这儿是客户端');
        return [
            'result'  => $result,
        ];
    }

}

服务端启动

# cd swoft/bin/
# php swoft rpc:start

客户端启动
修改客户端 .env HTTP_PORT=8081

# cd swoft/bin/
# php swoft start

访问

192.168.247.140:8081/test/test

在这里插入图片描述

下一篇:服务降级与熔断器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值