🌱 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} []

效果图

截图

赞助商