Expand description
代码执行 server functions:StartExec / GetExecResult。
StartExec 流程:速率限制 → 语言白名单 → 源码大小校验 → 入队(DashMap) → spawn 后台 task(信号量限并发 + clamp_limits + run_in_container)。 返回 task_id 供前端轮询。GetExecResult 读取任务条目。
错误脱敏:匿名可见错误(不支持的语言、超限、限流)返回中文消息;系统内部 异常(容器拉起失败等)记服务端日志,对前端返回统一「系统暂时不可用」。
双目标可见性:本模块不 cfg-gate(server function 需对 WASM 可见以便客户端
调用),但所有 server-only 的 use 与全局静态量都单独 gate,使 WASM 侧仅保留
函数签名(body 被 server 宏剥离)。与 posts 模块的约定一致。
Statics§
- RUNNER_
SEMAPHORE - 并发容器控制信号量,限制同时在跑的容器数量(
CODE_RUNNER_MAX_CONCURRENT)。
Functions§
- check_
rate_ 🔒limit_ for_ user - 速率限制检查(admin 放行)。
- client_
ip 🔒 - 从 FullstackContext 提取客户端 IP(无上下文时退回 “unknown”)。
- get_
exec_ result - 查询任务执行结果(前端轮询)。
- spawn_
exec_ 🔒task - 后台执行容器任务的核心:信号量限并发 → clamp_limits → 调用 runner → 写 EXEC_TASKS。
- start_
exec - 提交一次代码执行请求。
- start_
exec_ stream - 提交一次流式代码执行请求。
- validate_
exec_ 🔒request - 公共校验逻辑:速率限制 + 语言白名单 + 源码大小。