?? RPC 遠(yuǎn)程服務(wù)調(diào)用插件

dev-2.x-dev
版本
2025-06-22
版本更新時(shí)間
2893
安裝
19
star
簡介
什么叫RPC,為什么要RPC,RPC是指遠(yuǎn)程過程調(diào)用,也就是說兩臺(tái)服務(wù)器A、B。一個(gè)應(yīng)用部署在A服務(wù)器上,想要調(diào)用B服務(wù)器上應(yīng)用提供的函數(shù)/方法,由于不在一個(gè)內(nèi)存空間,不能直接調(diào)用,需要通過網(wǎng)絡(luò)來表達(dá)調(diào)用的語義和傳達(dá)調(diào)用的數(shù)據(jù)。
安裝
composer require tinywan/rpc
使用
服務(wù)端
新建 service/User.php
服務(wù)(目錄不存在自行創(chuàng)建)
namespace service;
class User
{
public function get($args)
{
return response_rpc_json(0, '獲取成功', $args);
}
}
客戶端
基礎(chǔ)使用
// 建立socket連接到內(nèi)部推送端口
$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',
]
]
];
// 發(fā)送數(shù)據(jù),注意5678端口是Text協(xié)議的端口,Text協(xié)議需要在數(shù)據(jù)末尾加上換行符
fwrite($client, json_encode($request)."\n");
// 讀取推送結(jié)果
$result = fgets($client, 10240000);
// 解析JSON字符串
$result = json_decode($result, true);
var_export($result);
請求響應(yīng)結(jié)果
{
"code": 0,
"msg": "用戶列表",
"data": {
"uid": 2024,
"username": "Tinywan"
}
}
請求響應(yīng)異常結(jié)果
{
"code": 404,
"msg": "接口調(diào)用類不存在",
"data": {}
}
異常錯(cuò)誤日志
[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} []