🌱 RPC 远程服务调用插件
v1.3.0
版本
2024-08-16
版本更新时间
2098
安装
18
star
简介
什么叫RPC,为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A、B。一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
安装
composer require tinywan/rpc
使用
服务端
新建 service/User.php
服务(目录不存在自行创建)
namespace service;
class User
{
public function get($args)
{
return response_rpc_json(0, '获取成功', $args);
}
}
客户端
webman框架使用
use Tinywan\Rpc\Client;
$request = [
'class' => 'User',
'method' => 'get',
'args' => [
[
'uid' => 2023,
'username' => 'Tinywan',
]
]
];
$client = new Client('tcp://127.0.0.1:9512');
$res = $client->request($request);
var_export($res);
非webman框架使用
// 建立socket连接到内部推送端口
$client = stream_socket_client('tcp://127.0.0.1:9512', $errorCode, $errorMessage);
if (false === $client) {
throw new \Exception('rpc failed to connect: '.$errorMessage);
}
$request = [
'class' => 'user',
'method' => 'get',
'args' => [
[
'uid' => 2023,
'username' => 'Tinywan',
]
]
];
// 发送数据,注意5678端口是Text协议的端口,Text协议需要在数据末尾加上换行符
fwrite($client, json_encode($request)."\n");
// 读取推送结果
$result = fgets($client, 10240000);
// 解析JSON字符串
$result = json_decode($result, true);
var_export($result);
请求响应结果
{
"code": 0,
"msg": "用户列表",
"data": {
"uid": 2024,
"username": "Tinywan"
}
}
请求响应异常结果
{
"code": 404,
"msg": "接口调用类不存在",
"data": {}
}
异常错误日志
[2024-08-16 14:46:26] default.ERROR:
RPC Service Exception Message SQLSTATE[42S22]:
Column not found: 1054 Unknown column 'to_user_id' in 'where clause'
{"error":"SQLSTATE[42S22]:
Column not found: 1054 Unknown column 'to_user_id' in 'where clause'",
"file":"/var/www/db/PDOConnection.php","line":797} []