PHPRPC 是一個輕量、安全、跨語言、跨平台、跨域的遠程過程調用協議框架。核心理念:「只做一件事,並把它做好」——專注於數據傳輸,將傳輸做到極致。
優勢:
<?php
require_once("../php/phprpc_server.php");
$server = new PHPRPC_Server();
$server->add("sha1"); // 發布 PHP 內置 sha1 函數
$server->start();
?>
<!DOCTYPE html>
<html xmlns="https://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>計算 SHA1</title>
<script type="text/javascript" src="../js/compressed/phprpc_client.js"></script>
<script type="text/javascript">
var rpc = new PHPRPC_Client('sha1.php', ['sha1']);
function $(id) { return document.getElementById(id); }
function showResult(result) {
$('sha1').value = result;
}
function sha1() {
var input = $('sha1').value;
$('sha1').value = "Loading...";
rpc.sha1(input, showResult); // 異步調用,回調處理結果
}
</script>
</head>
<body>
<input type="text" id="sha1" />
<input type="button" value="計算 SHA1" onclick="sha1()" />
</body>
</html>
var rpc = new PHPRPC_Client('sha1.php', ['sha1']);
rpc.sha1(input, showResult);
<?php
require_once("phprpc_server.php");
class AuthService {
public function login($username, $password) {
// 實際項目中:驗證用戶名密碼、生成 Token、設置 Session
$user = User::findByUsername($username);
if ($user && password_verify($password, $user->password_hash)) {
$_SESSION['user_id'] = $user->id;
return ['success' => true, 'token' => $user->generateToken()];
}
return ['success' => false, 'message' => '用戶名或密碼錯誤'];
}
public function logout() {
session_destroy();
return ['success' => true];
}
}
$server = new PHPRPC_Server();
$server->add(new AuthService()); // 發布整個類的公共方法
$server->start();
<script>
var rpc = new PHPRPC_Client('auth.php', ['login', 'logout']);
function doLogin() {
var username = $('#username').val();
var password = $('#password').val();
$('#loginBtn').prop('disabled', true).val('登錄中...');
rpc.login(username, password, function(result) {
$('#loginBtn').prop('disabled', false).val('登錄');
if (result.success) {
// 登錄成功:跳轉或更新 UI
window.location.href = '/dashboard';
} else {
// 顯示錯誤
$('#errorMsg').text(result.message).show();
}
});
}
</script>
| 特性 | 傳統 AJAX | PHPRPC |
|---|---|---|
| 跨域支援 | 需配置 CORS/JSONP | 原生支援,零配置 |
| 參數序列化 | 手動 JSON.stringify | 自動處理複雜類型 |
| 錯誤處理 | HTTP 狀態碼+自定義 | 分級錯誤處理機制 |
| Session 管理 | 依賴 Cookie | 內建 Session 支援 |
| 代碼組織 | 分散在 JS/PHP 中 | 服務導向,介面清晰 |
PHPRPC 雖非主流選擇,但其「專注傳輸、極簡介面」的設計哲學在特定場景下極具價值,尤其適合快速構建內部 RPC 服務或跨域 AJAX 應用。