icloudza/r1rpc
GitHub: icloudza/r1rpc
r1rpc 是一个真机 RPC 中继服务,把只能在物理设备上运行的函数封装成标准 HTTP 接口,供服务端同步调用。
Stars: 28 | Forks: 13
# r1rpc
**把只能在真机/特定环境里跑的函数,封装成一个 HTTP 接口。**
有些能力天生离不开设备——iOS 的 DeviceCheck / App Attest、App 内部的加密签名、必须真机环境才肯出活的 SDK……服务器上算不出来。r1rpc 让真机挂一个常驻客户端连到中心服务器;调用方发一个普通 HTTP 请求,服务器转发给在线设备执行,再把结果同步带回。一句话:**远程过程调用,但"过程"跑在你的真机上。**
## 特性
- **同步 RPC over WebSocket**:调用方拿到的是同步结果,设备侧是常驻长连接,毫秒级下发。
- **分组路由 + 负载均衡**:一个分组是一个设备池,同组多台设备自动轮询分发。
- **三套独立鉴权**:后台账号(登面板)、调用方(按分组 none/apikey)、设备(分组 device key)各管各的,互不串味。
- **能力自动发现**:设备登录时上报自己支持的 action,面板直接可见,无需手维护。
- **可观测**:Web 面板含实时请求频谱、成功率/延迟趋势、调用审计、设备/客户端状态。
- **单节点、零外部依赖**:只需一个 MySQL,无 Redis;状态在内存里算,明细落库。
- **前端内嵌**:React 面板编译进二进制(`go:embed`),单文件可执行,开箱即用。
## 面板预览
## 快速开始
### 方式一:Docker(推荐)
# 1. 改配置(compose 会把它挂载进容器作为 config.yaml)
# 生产务必修改 jwt_secret / admin.password / mysql.password
vim deploy/config.docker.yaml
# 2. 一键起 服务 + MySQL
docker compose -f deploy/docker-compose.yml up -d --build
启动后:
- 面板与接口:`http://localhost:9876`
- 服务首次启动会自动建库建表,并按配置里的 `admin.username` / `admin.password` 创建后台管理员。
### 方式二:从源码运行
需要 Go 1.26+ 和一个 MySQL。
cp config.example.yaml config.yaml # 改 jwt_secret / admin 密码 / mysql 连接
go run ./cmd/dbinit # 建库建表 + 初始化管理员(可选,server 启动也会做)
go run ./cmd/server # 启动服务
## 配置
配置文件按优先级查找 `config.yaml` → `r1rpc.yaml`;**任意项都可用同名大写环境变量覆盖**(如 `JWT_SECRET`、`MYSQL_HOST`),方便容器部署。完整模板见 [`config.example.yaml`](config.example.yaml)。
server:
http_addr: ":9876" # 监听地址
jwt_secret: "" # 必填:后台 JWT 签名密钥
time_zone: "Asia/Shanghai"
admin: # 首次启动自动创建的后台管理员
username: "admin"
password: "" # 必填
mysql:
host: "127.0.0.1"
port: 3306
user: "root"
password: ""
db: "r1rpc"
limits:
request_timeout_seconds: 25 # 单次调用超时
client_max_in_flight: 8 # 单设备同时在途请求数
device_offline_seconds: 20 # 多久无心跳判离线
## 教程
从零接入一台设备并发起调用的完整步骤(建分组 → 设备端接入 → 发起调用)、以及设备接入的 WebSocket 协议,见 **[docs/tutorial.md](docs/tutorial.md)**。
## 目录结构
cmd/
server/ 服务入口
dbinit/ 建库建表 + 初始化管理员
internal/
app/ 业务编排(登录、调用、结果回收、后台任务)
rpc/ Hub:设备会话、任务队列、路由分发、并发槽
web/ HTTP 路由 + WebSocket + 内嵌前端
store/ MySQL 存取 + schema
config/ YAML 配置加载
auth/ model/ JWT / 数据结构
web/ React + Radix Themes 面板(构建后 embed 进二进制)
deploy/ Dockerfile + docker-compose + 配置
## 技术栈
Go(标准库 net/http 1.22 路由 + [coder/websocket](https://github.com/coder/websocket))· MySQL · React 18 + Vite + Radix Themes + Recharts。单节点、无 Redis。
## 友情链接
标签:EVTX分析, Go, React, RPC框架, Ruby工具, Syscalls, WebSocket, 依赖分析, 日志审计, 移动端开发, 请求拦截, 远程调用