把只能在真机/特定环境里跑的函数,封装成一个 HTTP 接口。

有些能力天生离不开设备——iOS 的 DeviceCheck / App Attest、App 内部的加密签名、必须真机环境才肯出活的 SDK……服务器上算不出来。r1rpc 让真机挂一个常驻客户端连到中心服务器;调用方发一个普通 HTTP 请求,服务器转发给在线设备执行,再把结果同步带回。一句话:远程过程调用,但"过程"跑在你的真机上。

🙏 致谢:r1rpc 基于 @manyuegong33r0rpc 重构而来——核心架构与中继协议的思路源自原作者,本项目在其基础上重写了后端、配置、面板与部署。特别鸣谢原作者的开源工作。


特性

  • 同步 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.yamlr1rpc.yaml任意项都可用同名大写环境变量覆盖(如 JWT_SECRETMYSQL_HOST),方便容器部署。完整模板见 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   # 多久无心跳判离线

对外调用鉴权(none/apikey)不在这里配,它属于每个分组,在面板的分组页单独设置。


教程

从零接入一台设备并发起调用的完整步骤(建分组 → 设备端接入 → 发起调用)、以及设备接入的 WebSocket 协议,见 docs/tutorial.md

可跑示例:examples/(设备端 + 调用方)。


目录结构

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)· MySQL · React 18 + Vite + Radix Themes + Recharts。单节点、无 Redis。

友情链接

LINUX DO —— 新的理想型社区,技术爱好者的聚集地。