ENGINEERING NOTE 03 / 50 · SMS
如何轮询接码订单而不制造请求风暴
轮询需要截止时间、请求预算和终态停止条件。只有时间间隔,无法阻止被遗忘的页面一直请求。
本文由 OPEN RAMBO 发布。工程方案和伪代码用于说明设计,不是现有产品 API 文档;示例数字均为演示。
同一订单只留一个轮询器
导航和组件重挂载可能为同一订单创建多个定时器。新建前取消旧定时器;当前请求结束后再安排下一次,避免慢响应造成重叠。
以服务端到期时间为准
用服务端到期时间与测得的时间偏移计算剩余窗口。收码、确认取消或过期后停止。后台标签可降低频率,恢复可见时重新查询,不把旧标签当最终状态。
明确处理过载
遵守接口重试延迟,并分散客户端请求时间。鉴权失败应停止并提示登录,而非无限重试。网络超时与订单过期必须区分,前者是传输问题,后者是订单状态。
示意流程
while now() < expires_at and requests < budget:
state = await read_order(order_id)
if state in TERMINAL: break
await sleep(next_delay_with_jitter())
requests += 1如何验收
用模拟时钟测试隐藏标签、重挂载、慢请求与到期,断言总请求数有上限。