# rpc
**Repository Path**: deepoo/rpc
## Basic Information
- **Project Name**: rpc
- **Description**: php rpc server/client. based on workerman.
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2022-02-19
- **Last Updated**: 2022-07-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Laravel 的 RPC 框架
- 基于 workerman 的多进程 RPC 框架
- 状态可维持,支持多次调用
## 数据包样本
- 首部固定 10 个字节长度用来保存整个数据包长度,位数不够左补 0
- 数据格式为 json 字符串
```bash
0000000068{"code":0,"message":"ok","data":["hello world, hello u!"]}
```
## 安装
```bash
# 安装
composer require majorbio/rpc
# 发布配置文件
php artisan vendor:publish --provider="majorbio\rpc\Providers\RpcServiceProvider"
```
# Server 服务端
一、 配置 /config/rpc.php
```php
env('RPC_NAME', 'MajorbioRpc'),
// 监听端口
'port' => env('RPC_PORT', 39000),
// 启动进程数量
'count' => env('RPC_WORKER_COUNT', 4),
// RPC 服务文件命名空间
'rpcNameSpace' => '\\App\\Rpc\\',
// 指定 workerman 的 pid 文件
'pidFile' => storage_path() . '/workerman/workerman.pid',
// 指定 workerman 的 log 文件
'logFile' => storage_path() . '/workerman/workerman.log',
// 省略 -d 参数
'daemonize' => env('RPC_DAEMONIZE', false),
];
```
二、创建 RPC 服务 /app/Rpc/Calculator.php
```php
a = $a;
}
/**
* 设置 b
*
* @param int $a
*
* @return void
*/
public function setB(int $b = 0)
{
$this->b = $b;
}
/**
* 求和
*
* @return RS
*/
public function sum(): RS
{
return new RS(0, 'Calculator-sum', ($this->a + $this->b));
}
/**
* 相乘
*
* @return int
*/
public function multiply(): int
{
return $this->a * $this->b;
}
}
```
三、运行 RPC 服务
```bash
php artisan rpc start
```
# Client 客户端
```php
invoke('Calculator', 'setA', [5]);
// 调用 setB 方法(注意传参是个数组)
$rpcClient->invoke('Calculator', 'setB', [3]);
// 调用 sum 方法
var_dump($rpcClient->invoke('Calculator', 'sum'));
// 调用 multiply 方法
var_dump($rpcClient->invoke('Calculator', 'multiply'));
$rpcClient->disconnect();
```