rpi-server
JSON-RPC 2.0 server for rpi with streaming subscriptions — 基于 jsonrpsee 和 WebSocket 传输。
特性
- ✅ JSON-RPC 2.0 标准协议 — 类型安全、工具友好、跨语言兼容
- ✅ WebSocket 长连接 — 低延迟、高性能、支持多客户端并发
- ✅ 流式订阅 — 通过
subscribe订阅实时事件流 - ✅ 会话管理 — 支持多个 rpi 会话并行
- ✅ 标准化 — 告别原始 TCP JSONL,拥抱标准协议
与旧版对比
| 特性 | 旧版 (TCP JSONL) | 新版 (JSON-RPC 2.0) |
|---|---|---|
| 协议 | 自定义 JSONL | JSON-RPC 2.0 标准 |
| 传输 | 原始 TCP | WebSocket |
| 流式 | 逐行中继 | 订阅模式 |
| 会话管理 | 隐式(连接=会话) | 显式 start_session/stop_session |
| 类型安全 | ❌ | ✅ (jsonrpsee) |
| 工具支持 | 需要专用工具 | 可用任何 JSON-RPC 客户端 |
安装
使用方式
独立运行
# 启动服务器(默认 ws://127.0.0.1:9800)
# 指定端口
# 传递 rpi 参数
作为 rpi 插件
// 启动服务器
// 响应
客户端调用
// 启动会话
// 发送命令
// 流式订阅(实时接收事件)
JSON-RPC 方法
start_session
启动新的 rpi 会话。
响应:
send
向会话发送命令。
subscribe (Subscription)
订阅会话的事件流(流式响应)。
流式事件:
stop_session
停止会话。
list_sessions
列出所有会话。
server_status
获取服务器状态。
跨语言客户端
由于使用标准 JSON-RPC 2.0,可以用任何语言调用:
Python
# 启动会话
await
=
=
# 发送命令
await
await
# 订阅流式事件
await
# 接收流式事件
=
break
JavaScript/Node.js
const WebSocket = require;
const ws = ;
ws.;
ws.;
架构
Client (ws://) ←→ WebSocket ←→ jsonrpsee Server ←→ Session Manager
↓
Child Process (rpi --mode rpc)
↓
stdout → broadcast → subscribe
关键组件:
- jsonrpsee — JSON-RPC 2.0 实现,提供类型安全和标准化
- WebSocket — 长连接传输,低延迟
- broadcast channel — tokio 广播通道,支持多订阅者
- Session — 管理子进程生命周期和事件流
性能
- WebSocket 比原始 TCP 多一层帧协议,但开销极小(2-14 bytes/frame)
- broadcast channel 支持多个订阅者同时接收事件
- 异步 I/O — 基于 tokio,高并发性能优秀
License
MIT