跳转至

http.frm.timeout

每路由超时中间件(P6-B;deadline 前后判 + 504,注入时钟确定性)

语义登记(v1 口径): 形 = 截止时刻算术:dl = start + budget(tout_deadline);链前判 tout_pre(now < dl → 可进)/ tout_check(决策面:rc 1 = 进,0 = 504 短路, left = 剩余预算下界 0 —— 组合层可将 left 交给 IO 面(如 net 垫片时钟) 作 socket 预算);handler 返回后判 tout_over(now >= dl → 越限,组合层 以 504 应答/标记)。时钟 = 注入参数(tick 任意单调域;真钟装配归组合层 —— ctron_net_now_ns 垫片 or 逻辑序号,确定性测试即注入计数)。

【mid-handler 中止诚实登记】纯层无执行控制 —— 运行中 handler 不可被 本模块打断;v1 = 前/后判的诚实检出(前判拒已越限请求,后判观测越限 并交组合层处置),真·运行中止(net deadline 触发可取消执行)列 net 集成面(P8 志向;题面 "每路由超时经 net deadline" 的 IO 半边)。 后判语义的代价 = 越限响应仍以 handler 产物生成,组合层须弃其体改发 504(fixture 演示该分支)。

per-route = budget 由组合层按 route id 选择(派发表查 budget;本模块 单次调用面无路由感知 —— 链形装配每路由一适配器,或派发处选 budget)。

注入面:504 响应体/头恒字面量,无请求字节。

use 面:零 use 纯模块(同 cors/sechdr/limit —— 多中间件同入口组合各为 无共享叶子,严格树 E5020 规避)。

pub struct

struct ToutDec

Field Type
rc I64
left I64

pub fn

Signature Returns Description
tout_deadline(start: I64, budget: I64) I64 截止 = start + budget(tick 域任意单调;I64 加法,tick 域组合层纪律:
恒以 epoch 起点附近值入参,溢出面登记志向)
tout_pre(now: I64, dl: I64) I64 链前判:1 = 未越限可进 / 0 = 已越限(now >= dl 即拒,恰等即拒 —— 从严)
tout_over(now: I64, dl: I64) I64 后判(handler 返回后):1 = 越限 / 0 = 界内
tout_left(now: I64, dl: I64) I64 剩余预算(下界 0;组合层可交 IO 面作 socket 预算)
td_rc(d: ToutDec) I64 —
td_left(d: ToutDec) I64 —
tout_check(now: I64, dl: I64) ToutDec 链前决策:rc = tout_pre 同域(1 进 / 0 504 短路),left 随出
tout_resp_504() Str 504 Gateway Timeout(body 7 字节;组合层越限分支改发此响应,弃 handler 体)