Skip to content

响应与取消 ​

NovaResponse 管理本地输出状态;ResponseSink 执行协议写入;连接协调器拥有取消交互、失败输入和关闭传输的权限。这些职责不能合并到一个 abort 方法里。

状态与提交 ​

text
idle → streaming → ended
  └────────┴─────→ aborted

headersSent 由独立的提交标记表示。未提交的响应被取消后处于 aborted,headersSent 仍为 false。writableEnded 只表示 ended,成功终态不受迟到取消改变。

写入队列 ​

提交、写入和结束按 Promise tail 排队。每个异步边界后重新检查取消,输出端口失败使后续写入失败。sink 等待 drain 时同时观察 close、error 和取消,终态后释放临时监听器。

内部有序队列保证字节顺序,应用仍需等待每次 write,才能限制生产端积压。HTTP framing 在 sink 与协议层,应用响应对象不拼装 TCP 包。

完成信号 ​

endRequested 表示调用方已经请求结束,finished Promise 表示输出真正结束。Application 等待后者,再发 onResponse。单次发送、流式结束和取消共享终态规则,失败不伪装成成功。

取消所有权 ​

事件负责方动作
客户端关闭或超时协调器取消 signal、失败 body、关闭传输
输出端口失败Response → onFailure → 协调器本地中止后通知交互终止
共享 signal 取消Request / Response观察并清理本地资源,不反向再调用 onFailure
提交前业务或流源异常Application 错误链允许构造替代响应
提交后业务或流源异常协调器终止交互,不发送第二个响应

onFailure 必须同步、无抛错,不能用于普通可恢复错误。协调器需要保留首次失败原因并验证交互身份。

关联验证 ​

response.spec.ts 验证写入与结束;exchange-lifecycle.spec.ts 验证所有权、迟到取消与跨请求隔离;stream-timeout-lifecycle.spec.ts 验证长期流的超时和关闭。迁移接口见 Core API 迁移。

Nova · Node.js HTTP framework