# Workerman JSON-RPC **Repository Path**: chenbool/workerman-json-rpc ## Basic Information - **Project Name**: Workerman JSON-RPC - **Description**: Workerman JSON-RPC - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-11 - **Last Updated**: 2026-05-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JSON-RPC 微服务框架 基于 Workerman + JSON-RPC 的微服务框架,支持服务注册发现。 ## 项目结构 ``` etcd-php-jsonRpc/ ├── workerman/ # 基础版 (无 Etcd) ├── workerman-etcd/ # 集成 Etcd 版 └── etcd-v3.6.5-windows-amd64/ # Etcd 服务端 ``` ## 两个版本对比 | 版本 | 特点 | 适用场景 | |------|------|----------| | [workerman](./workerman) | 简单、无 Etcd | 单机/开发测试 | | [workerman-etcd](./workerman-etcd) | 服务自动注册发现 | 微服务/生产环境 | ## 快速开始 ### 方式一: 基础版 (workerman) ```bash # 1. 进入目录 cd workerman # 2. 安装依赖 composer install # 3. 启动服务 php start.php # 4. 测试 (新终端) php test-rpc-client.php ``` ### 方式二: Etcd 版 (workerman-etcd) ```bash # 1. 启动 etcd (终端1) cd ../etcd-v3.6.5-windows-amd64 .\etcd.exe # 2. 进入目录 (终端2) cd ../workerman-etcd # 3. 安装依赖 composer install # 4. 启动服务 php start.php # 5. 测试 (终端3) php test-rpc-client.php ``` ## 架构图 ### 完整架构 ``` ┌──────────────────────────────────────────────────────────────────────────────────┐ │ 客户端 (Client) │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ ┌──────────────────┐ ┌────────────────────────────┐ │ │ │ │ │ chenbool/curl │ │ danog/advanced-json-rpc │ │ │ │ │ │ │ │ │ │ │ │ │ │ • 发送 HTTP │ │ • 构造 Request │ │ │ │ │ │ • 处理响应 │ │ • 解析 Response │ │ │ │ │ │ │ │ │ │ │ │ │ └────────┬─────────┘ └────────────┬─────────────┘ │ │ │ │ │ │ │ │ │ │ │ HTTP + JSON-RPC │ │ │ │ └────────────┼──────────────────────────────────────┼───────────────────┘ │ │ │ │ │ │ │ POST /rpc/user │ │ │ │ {"jsonrpc":"2.0",...} │ │ │ ▼ ▼ │ ├──────────────────────────────────────────────────────────────────────────────────┤ │ Workerman HTTP 服务 │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │ │ │ │ │ HTTP Server │───▶│ 路由器 │───▶│ Dispatcher │ │ │ │ │ │ │ │ /rpc/{name} │ │ (danog/advanced) │ │ │ │ │ │ • 监听端口 │ │ │ │ • 解析 JSON-RPC │ │ │ │ │ │ • 接收请求 │ │ │ │ • 调用对应服务方法 │ │ │ │ │ └─────────────┘ └─────────────┘ └──────────┬──────────┘ │ │ │ │ │ │ │ │ └────────────────────────────────────────────────────────┼────────────────┘ │ │ │ │ └───────────────────────────────────────────────────────────┼───────────────────┘ │ ┌───────────────────────────────────────┼───────────────────┐ │ │ │ ▼ ▼ ▼ ┌────────────────────────────────┐ ┌────────────────────────────────────────┐ │ UserRpcService │ │ OrderRpcService │ │ ┌──────────────────────────┐ │ │ ┌──────────────────────────────────┐ │ │ │ │ │ │ │ │ │ │ │ listUsers() │ │ │ │ listOrders() │ │ │ │ └─ 返回用户列表 │ │ │ │ └─ 返回订单列表 │ │ │ │ │ │ │ │ │ │ │ │ getUser(id) │ │ │ │ getOrder(id) │ │ │ │ └─ 返回指定用户 │ │ │ │ └─ 返回指定订单 │ │ │ │ │ │ │ │ │ │ │ │ createUser(data) │ │ │ │ createOrder(data) │ │ │ │ └─ 创建用户 │ │ │ │ └─ 创建订单 │ │ │ │ │ │ │ │ │ │ │ │ updateUser(id, data) │ │ │ │ updateOrder(id, data) │ │ │ │ └─ 更新用户 │ │ │ │ └─ 更新订单 │ │ │ │ │ │ │ │ │ │ │ │ deleteUser(id) │ │ │ │ deleteOrder(id) │ │ │ │ └─ 删除用户 │ │ │ │ └─ 删除订单 │ │ │ │ │ │ │ │ │ │ │ └──────────────────────────┘ │ │ └──────────────────────────────────┘ │ └────────────────────────────────┘ └────────────────────────────────────────┘ │ │ (可选) 服务注册 ▼ ┌──────────────────────────────────────────────────────────────────────────────────┐ │ Etcd 服务注册中心 │ │ ┌────────────────────────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ 启动时注册: │ │ │ │ ┌────────────────────────────┬─────────────────────────────────┐ │ │ │ │ │ Key │ Value │ │ │ │ │ ├────────────────────────────┼─────────────────────────────────┤ │ │ │ │ │ /rpc/services/user │ {"host":"127.0.0.1", │ │ │ │ │ │ │ "port":8792, │ │ │ │ │ │ │ "name":"user", │ │ │ │ │ │ │ "registered_at":"..."} │ │ │ │ │ ├────────────────────────────┼─────────────────────────────────┤ │ │ │ │ │ /rpc/services/order │ {"host":"127.0.0.1", │ │ │ │ │ │ │ "port":8792, │ │ │ │ │ │ │ "name":"order", │ │ │ │ │ │ │ "registered_at":"..."} │ │ │ │ │ └────────────────────────────┴─────────────────────────────────┘ │ │ │ │ │ │ │ │ 客户端发现: │ │ │ │ • 查询 /rpc/services/user → 获取 user 服务地址 │ │ │ │ • 查询 /rpc/services/order → 获取 order 服务地址 │ │ │ │ │ │ │ └────────────────────────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────────────────────┘ ``` ### 简化版(无 Etcd) ``` ┌──────────┐ ┌──────────────┐ ┌─────────────┐ ┌─────────────┐ │ Client │────▶│ Workerman │────▶│ Dispatcher │────▶│ Service │ │ (curl) │ │ HTTP │ │ │ │(user/order)│ └──────────┘ └──────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ │ │ │ │ │ │ │ ▼ │ │ │ ┌─────────────┐ │ │ │ │ 业务逻辑 │ │ │ │ └─────────────┘ │ │ │ │ │ │ │ ◀─────────────────┴────────────────────┘ │ │ Response ``` ### 数据流向 ``` ┌─────────┐ ┌─────────────┐ ┌─────────────┐ ┌──────────┐ │ 客户端 │ Request │ Workerman │ JSON │ Dispatcher │ 调用 │ Service │ └────┬────┘ │ └─────┬─────┘ │ └──────┬──────┘ │ └────┬────┘ │ │ │ │ │ │ 1.构造 │ │ │ │ ├───────────────▶│ │ │ │ │ │ │ │ │ │ │ 2.接收 │ │ │ │ ├──────────────▶│ │ │ │ │ │ │ │ │ │ │ 3.解析 │ │ │ │ ├─────────────▶│ │ │ │ │ │ │ │ │ │ │ 4.调用 │ │ │ │ ├─────────────▶ │ │ │ │ │ │ │ │ │ 5.返回结果 │ │ │ │ │◀──────────── │ │ │ │ │ │ 6.Response │ │ 7.Response │ │ │◀──────────────┤◀─────────────┤◀────────────┤ │ │ │ │ │ │ ``` ### 完整流程时序图 ``` ┌────┐ ┌───────────┐ ┌───────────┐ ┌────────┐ ┌──────┐ │客户端│ │ Workerman │ │ Dispatcher│ │ Service│ │ Etcd │ └──┬─┘ └─────┬─────┘ └─────┬─────┘ └───┬────┘ └──┬───┘ │ │ │ │ │ │ 1.Request │ │ │ │ │──────────────▶│ │ │ │ │ │ │ │ │ │ │ 2.转发请求 │ │ │ │ │─────────────────▶│ │ │ │ │ │ │ │ │ │ │ 3.解析请求 │ │ │ │ │─────────────▶│ │ │ │ │ │ │ │ │ │ │ 4.调用方法 │ │ │ │ │────────────▶│ │ │ │ │ │ │ │ │ │ 5.返回结果 │ │ │ │◀─────────────│ │ │ │ │ │ │ │ │ 6.Response │ │ │ │ │◀──────────────────│ │ │ │ │ │ │ │ │ 7.Response │ │ │ │ │◀──────────────│ │ │ │ │ │ │ │ │ │ │ │ │ 8.注册服务│ │ │ │ │─────────────▶ │ │ │ │ │ │ │ │ │ 9.确认 │ │ │ │ │◀───────────── │ │ │ │ │ ``` ## 技术栈 | 技术 | 用途 | 必选 | |------|------|------| | workerman/workerman | HTTP 服务器 | ✅ | | danog/advanced-json-rpc | JSON-RPC 协议 | ✅ | | chenbool/curl | HTTP 客户端 | ✅ | | chenbool/etcd-v3 | 服务注册发现 | ❌ (仅 workerman-etcd) | ## 文档 | 文件 | 说明 | |------|------| | [workerman/readme.md](./workerman/readme.md) | 基础版使用说明 | | [workerman-etcd/readme.md](./workerman-etcd/readme.md) | Etcd 版使用说明 | | [advanced-json-rpc.md](./advanced-json-rpc.md) | JSON-RPC 协议文档 | | [workerman.md](./workerman.md) | Workerman 文档 | | [etcd-v3.md](./etcd-v3.md) | Etcd 使用文档 | ## 端口配置 | 服务 | 默认端口 | |------|----------| | Workerman HTTP | 8790 / 8792 | | Etcd | 2379 | ## 服务接口 ``` GET /health # 健康检查 POST /rpc/{服务名} # RPC 调用 ``` ### RPC 调用示例 ```bash curl -X POST http://127.0.0.1:8790/rpc/user \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"listUsers","params":[],"id":1}' ``` ## 核心文件 | 目录 | 说明 | |------|------| | `workerman/app/rpc/` | RPC 服务实现 | | `workerman-etcd/app/rpc/` | RPC 服务实现 (含 Etcd) | ## 常见问题 ### Q: 端口被占用? 修改对应目录的 `config.php` 中的端口号。 ### Q: 客户端报错 "Connection refused"? 1. 确认服务已启动 2. 检查端口是否正确 ### Q: workerman 和 workerman-etcd 有什么区别? - **workerman**: 简单版,客户端需要手动配置服务地址 - **workerman-etcd**: 完整版,服务自动注册到 Etcd,客户端从 Etcd 发现服务