Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Return@Async方法生成SpringMVC并将其返回到Ajax客户端_Javascript_Ajax_Spring_Jakarta Ee_Spring Mvc - Fatal编程技术网

Javascript Return@Async方法生成SpringMVC并将其返回到Ajax客户端

Javascript Return@Async方法生成SpringMVC并将其返回到Ajax客户端,javascript,ajax,spring,jakarta-ee,spring-mvc,Javascript,Ajax,Spring,Jakarta Ee,Spring Mvc,我的控制器中有一些方法,可以执行@Async任务 @Async public Future<String> getResultFromServer(){ String result = ...... return new AsyncResult<String>(result); } 我知道这非常接近Comit模型,但我对comet一般不太熟悉 我的问题是如何使用JavaScript/JQuery在客户端保持连接打开 我的@RequestMapping(

我的控制器中有一些方法,可以执行
@Async
任务

@Async
public Future<String> getResultFromServer(){
    String result = ......
    return new AsyncResult<String>(result);
} 
我知道这非常接近Comit模型,但我对comet一般不太熟悉

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


我的
@RequestMapping(value=“/async.do”,method=RequestMethod.POST)
method是否会将结果推送到客户端?

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

然后,请求将需要“等待”直到计算出方法结果,并在创建后立即返回


当然,这意味着连接将被打开多长时间(1分钟)。

感谢您的回答和直接执行方法的想法,我还有另一个问题:据我所知,Tomcat在为我的HTTP连接打开的单独线程中处理我的请求。这是否意味着如果我的请求持续15分钟,Tomcat线程将一直运行?这是否意味着此操作需要两个线程—一个用于请求,另一个用于异步任务?有没有办法在执行第二个线程(异步任务)时挂起第一个线程?如果使用
@async
,那么您有两个线程,一个线程调用
@async
注释的方法并立即返回,另一个线程真正在
@async
方法中执行任务。要挂起第一个线程,只需调用future.get(),这将阻止该线程,直到调用结果为止。但是如果这样做:调用
@async
并在wards之后直接调用future.get(),那么完整的
@async
内容是无用的,因为你用大量的技术材料模拟(几乎)方法调用的正常行为。@danny.lesnik:但是如果你的计算需要15分钟,那么你真的需要一个其他的解决方案,而不是在这段时间内保持连接!是的,我明白,你知道吗?我不确定Spring MVC是否可以与Comet一起使用,如果可以,如何实现它。@danny.lesnik:将此作为一个新问题发布,您最终是如何解决此问题/第2部分的?
@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();
    }
}