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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章