gpt4 book ai didi

java - 为什么没有 asyncContext.cancel()

转载 作者:行者123 更新时间:2023-11-30 04:24:01 24 4
gpt4 key购买 nike

虽然 Servlet 3.0 规范有 request.startAsync()asyncContext.start(),为什么它没有提供 asyncContext.stop()asyncContext.cancel() 来在服务器端启动必要的清理?

请在其他 question 的上下文中查看此内容了解我来自哪里。

  • 一个 HTTP 请求启动异步处理并返回一个.../outstandingRequests/requestId 链接到客户端。
  • 另一个 HTTP 请求在该链接上调用 DELETE 来取消该请求

在这种情况下,如果我有办法清理服务器端(servlet 容器之类的东西,比如 AsyncListeners),而不是必须调用 asyncContext.complete() ,它可能会尝试并将响应发送回客户端,这才有意义。不是吗?

最佳答案

在这种情况下,调用 1 仍然卡在那里,等待调用 2 进来并想要终止它时的响应。在这种情况下,为什么您不想在调用 1 上调用 complete() ,从而完成该调用以便客户端停止等待?在这种情况下,您可能希望将状态代码设置为 200 以外的值,但在任何情况下,complete 似乎都是最佳选择,因为它将控制权返回给原始调用者并执行任何操作请求相关清理工作。

当发生超时(这是一个错误)时,容器会调用 complete (我想象的是一个非 200 响应代码)。您描述的场景类似于超时(尽管是强制超时),所以为什么不做容器所做的同样的事情。只需在调用 complete 之前调用类似的代码即可:

ac.getResponse().setStatus(500);

任何人都可以向输出流写入一些内容来描述导致此错误的原因。

关于java - 为什么没有 asyncContext.cancel(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16328794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com