Workerman-JsonRpc 是一个基于 JSON 协议的远程过程调用RPC框架,结合了 Workerman 高性能 PHP socket 服务框架的强大功能。它为开发者提供了一个轻量且高效的解决方案,用于构建可扩展的 RPC 服务、聊天系统、游戏以及其他网络驱动的应用。
安装 Workerman-JsonRpc 非常简单:
1、克隆或下载仓库:
git clone https://github.com/walkor/workerman-JsonRpc
2、安装依赖:进入项目目录并运行:
composer install
3、启动与管理服务(以守护进程模式)
php start.php start -d
Workerman-JsonRpc 支持同步和异步的客户端调用,简化了远程过程调用。以下是具体用法。
要进行同步 RPC 调用,需配置服务器地址并调用远程服务类的方法:
<?php
include_once'yourClientDir/RpcClient.php';
// 配置服务器列表
$address_array = [
'tcp://127.0.0.1:2015',
'tcp://127.0.0.1:2015'
];
RpcClient::config($address_array);
$uid = 567;
// 实例化 User 服务客户端
$user_client = RpcClient::instance('User');
// 同步调用 getInfoByUid 方法
$result = $user_client->getInfoByUid($uid);
此代码调用位于服务器 Applications/JsonRpc/Services/User.php
中 User
类的 getInfoByUid
方法。
对于非阻塞操作,Workerman-JsonRpc 支持异步调用:
<?php
include_once'yourClientDir/RpcClient.php';
// 配置服务器列表
$address_array = [
'tcp://127.0.0.1:2015',
'tcp://127.0.0.1:2015'
];
RpcClient::config($address_array);
$uid = 567;
$user_client = RpcClient::instance('User');
// 异步调用方法
$user_client->asend_getInfoByUid($uid);
$user_client->asend_getEmail($uid);
// 其他业务逻辑
// ...
// 需要时获取异步结果
$result1 = $user_client->arecv_getEmail($uid);
$result2 = $user_client->arecv_getInfoByUid($uid);
这种方式允许客户端在等待服务器响应时继续处理其他任务,提升高延迟场景下的性能。
在服务端,服务以 PHP 类形式实现,存储在 Applications/JsonRpc/Services
目录下。每个类定义了可被远程调用的静态方法。例如,User
服务可能如下:
<?php
class User {
publicstaticfunction getInfoByUid($uid) {
// 获取用户信息的逻辑
return ['uid' => $uid, 'name' => '示例用户'];
}
publicstaticfunction getEmail($uid) {
// 获取用户邮箱的逻辑
return'user@example.com';
}
}
要添加新服务,只需在 Services
目录下创建新的类文件并定义所需方法。
Workerman-JsonRpc 内置了一个监控页面,可通过 http://<服务器IP>:55757
访问。该页面提供服务的状态、性能和问题信息,便于管理和调试。
Workerman-JsonRpc 是一个功能强大且灵活的 PHP RPC 框架。通过结合 Workerman 的高性能 socket 服务器功能和 JSON 协议的 RPC 特性,它使开发者能够轻松构建高效、实时的网络应用。其支持同步和异步调用,以及平滑重启和异常监控等功能,使其成为现代 PHP 开发的理想选择。