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