gpt4 book ai didi

java - 在 JSP 中编写并关闭响应,然后做一些额外的工作是否合法?

转载 作者:行者123 更新时间:2023-12-02 04:03:47 26 4
gpt4 key购买 nike

我正在开发一个网络应用程序,它通过 AJAX 请求与服务器进行通信。特殊类型的“关闭”请求需要 5 秒,Web 应用程序应该“即发即忘”,结果无关紧要。由于浏览器行为(仅执行有限数量的并发 AJAX 请求),5 秒的请求可能会卡住其他 AJAX 请求,这是 Not Acceptable 。

StackOverflow 中的聪明人建议我编写一个小型服务器端代理,Web 应用程序应该调用该代理,而不是原来的 5 秒代理。代理应该立即响应,关闭响应 channel ,然后执行 HTTP 请求并等待它,在服务器端而不是客户端花费 5 秒。 (原问题在这里:参见Is there a way to perform fire-and-forget AJAX request?)

服务器是带有JSP的Tomcat,我可以编写小的JPS页面。 (我不是一个经验丰富的 JSP 忍者,但我不害怕 Java。)我的问题是:编写这样的 JSP 是否合法,或者最佳实践是什么:

  • 发送响应,
  • 关闭回复 channel (out.close()够了吗?),以便在客户端结束AJAX请求,
  • “在后台”触发并处理(实际上:只是删除响应)HTTP 请求,这可能需要长达 5 秒的时间?

最佳答案

您应该担心的不仅仅是您的浏览器。阻塞 tomcat 线程 5 秒也会严重限制您的最大用户数(您最终需要每秒处理多少个请求?)

因此,在服务器中使其“更加”异步可能是有意义的。

单独在 JSP 中(使用 Sriplets?!) 不可能是一个健壮的实现 - 但如果您需要这样做,您应该考虑在单独的线程中开始“要做的工作”。

所以而不是

<%
do_something_heavy();
%>

你会喜欢的

<%
new Thread(new Runnable() {
public void run() {
do_something_heavy();
}
}).start();
%>

还有其他选项(JMS、ExecutorService、Spring @Async...),但这应该可以让您快速入门。

关于java - 在 JSP 中编写并关闭响应,然后做一些额外的工作是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34593775/

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