Files
lxc-streamutils/apps/server-rust
2026-07-18 11:44:58 -07:00
..
2026-07-18 11:44:58 -07:00
2026-07-18 11:44:58 -07:00
2026-07-15 23:54:53 -07:00
2026-07-15 23:54:53 -07:00
2026-07-18 11:44:58 -07:00
2026-07-16 00:12:26 -07:00

Rust 后端

这是多租户直播组件服务的可复用核心和唯一运行时进程。src/main.rs 只处理进程启动;主要行为由 library crate 导出。

模块职责

模块 职责
app 依赖组装、迁移、事件队列、源启动与旧配置导入
auth 邀请码、TOTP、恢复码、会话、secret 加密和组件 token
components 组件定义、设置版本、订阅、projection 与 handler registry
config TOML 解析、部署策略校验和旧单用户兼容字段
credentials CookieCloud URL 边界与 Bilibili Cookie 提取
db PostgreSQL pool、迁移和 RLS tenant context
domain provider-independent event 与 WebSocket envelope
http_api REST/WS、会话、权限、same-origin、静态资源与安全响应头
live provider trait、Bilibili adapter 与 source supervisor
overlay 弹幕姬设置及礼物/表情目录
rate_limit 匿名登录和 enrollment 滥用限制
realtime source event routing 与 component-scoped fanout
repository PostgreSQL component facade 和热路径缓存同步
song_request 点歌命令、事务队列、评分、快照和管理服务

重要不变量

  • handler 不能信任请求体中的 owner;owner 必须来自 session 或 source context。
  • tenant table 查询必须在 Db::set_tenant 后的事务中执行。
  • provider 只能输出 canonical、bounded、sanitized LiveEvent。
  • Bilibili listener 必须保持 20 秒心跳;socket 内部重连失败后由 adapter 重建完整客户端。
  • projection 无副作用;可靠业务动作必须使用幂等 handler。
  • token、邀请码和恢复码只存摘要,TOTP/CookieCloud Secret 只存认证加密密文。
  • EventHub 的 channel key 是 component ID,不允许增加无权限的全局 receiver。

本地质量检查

在仓库根目录执行:

cargo fmt --manifest-path apps/server-rust/Cargo.toml --check
cargo clippy --manifest-path apps/server-rust/Cargo.toml --all-targets --no-deps -- -D warnings
cargo test --manifest-path apps/server-rust/Cargo.toml --all-targets

第三方 vendor/blivedm 不作为本项目风格重写目标;项目只维护保留原始 JSON 所需的小补丁。

更多设计说明: