swoft1.x RPC 创建服务端与客户端

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

需要准备的

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

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

此时
虚拟机A的IP:192.168.0.135
虚拟机B的IP:192.168.0.134

虚拟机A (客户端)

首先,我们打开这三个文件

图中88行那改成你虚拟机B的ip和端口。

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

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

虚拟机B(服务端)
虚拟机只需启动就可以了

php bin/swoft rpc:start


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

http://192.168.0.135: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,
        ];
    }

}

服务端启动

php bin/swoft rpc:start

 

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

php bin/swoft start

访问

192.168.0.135:8081/test/test

 

posted @ 2020-03-21 16:41  开源  阅读(199)  评论(0编辑  收藏  举报