Files
go-omni/examples/httpSafety

HTTP 限额与停机

从仓库根目录运行 go run ./examples/httpSafety,可用 -addr 127.0.0.1:18080 指定端口。仅使用本机 HTTP 和模拟收尾,不连接数据库或其他服务。

上传验证:

dd if=/dev/zero bs=1048576 count=9 2>/dev/null | curl --data-binary @- http://127.0.0.1:8080/upload

普通路由默认 1 MiB,上传路由允许 16 MiB,服务硬上限 20 MiB;以上请求返回已读取的 9437184 字节。将上传路由改为 21 MiB 后,启动会报告该路由与服务硬上限冲突。实际文件上传须额外预留 multipart 字段/边界开销,并配置文件大小限制。

停机验证:另一个终端执行 curl http://127.0.0.1:8080/work,随后在服务终端按 Ctrl-C。先等待 1s 排空,再取消请求,处理器模拟 100ms 收尾;日志中先出现 request cleanup completed,再出现资源关闭记录。因为用尽排空预算,本次退出仍返回超时错误。

若处理器不在取消收尾窗口内退出,App 和 deps.Finish(runErr) 返回 lifecycle.ErrResourcesRetained 并跳过资源关闭。真实项目拥有的日志也必须在该错误下保留,生成入口已处理。进程应非零退出;库不自行退出进程,也不强杀 goroutine。