gpt4 book ai didi

javascript - 在 Spring MVC 中返回 @Async 方法结果并将其返回给 Ajax 客户端

转载 作者:数据小太阳 更新时间:2023-10-29 05:30:43 30 4
gpt4 key购买 nike

我的 Controller 中有一些方法可以执行 @Async 任务

@Async
public Future<String> getResultFromServer(){
String result = ......
return new AsyncResult<String>(result);
}

方法执行时间最多1o分钟。我需要做的只是将结果返回到将使用 AJAX/JQuery 连接的客户端。

我不希望客户端每秒请求我的服务器,无论 @Async 方法是否执行。我只想保持连接打开,然后将结果“推送”到服务器。

@RequestMapping(value="/async.do", method=RequestMethod.POST)
public void getResult(HttpServletResponse res){
String result = null;
PrintWriter out = res.getWriter();
Future<String> future = getResultFromServer();
try {
if (future.isDone())
result = future.get();
out.println(result);
out.close();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}

我知道这与 Comit 模型非常接近,但我对 cometd 一般不熟悉。

我的问题是如何使用 JavaScript/JQuery 在客户端保持连接打开?

我的@RequestMapping(value="/async.do", method=RequestMethod.POST) 方法会将结果推送到客户端吗?

最佳答案

最简单的方法是不以异步方式调用该方法,而是以同步方式直接从 Controller 调用它。

那么请求就需要“等待”,直到方法结果计算出来,一创建就可以返回。

当然,这意味着连接将打开完成工作所需的时间(1 分钟)。

关于javascript - 在 Spring MVC 中返回 @Async 方法结果并将其返回给 Ajax 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7907011/

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