2014-10-27 283 views
1

异步发送响应需要以下功能添加到我的春节,启动基于REST的应用:在春季启动

当POST方法被调用时,一个长期运行的进程已经启动。按照固定的时间间隔(每5秒左右),我需要在浏览器中向用户显示一条消息,直到过程结束。

注意:此方法可能不只是从浏览器调用。将来可能会从shell脚本中调用。目标是在“响应主体”中间歇性地发送响应。

我尝试添加如下代码:

    OutputStream os = response.getOutputStream(); 
        os.write(msg.getBytes()); 
        os.flush(); 

,但得到空指针异常而冲洗。

我该怎么做?我必须做一个AJAX调用或类似的东西吗?

+0

是您的'长时间运行的过程'是否启动,因为不同的线程和响应立即提交? – 2014-10-27 07:01:25

+0

不,它不是以不同的线程和响应启动的。 – DilTeam 2014-10-27 07:15:46

回答

3

这里有几个问题。最根本的是,HTTP并不旨在向单个请求发送多个响应。其次,在长时间运行的过程中阻塞请求处理线程可能会导致问题。

更好的方法是在启动长时间运行的过程后立即发送响应。此响应将包含202 Accepted状态代码和Location标头,该标头提供了另一个可由客户端轮询的URI,以获取有关长时间运行的任务的信息。例如:Location: https://yourapi.example.com/tasks/123456。客户有责任对此任务URI执行GET请求,以获取有关长时间运行进程的进度的信息。

+0

嗨,我也需要同样的东西。我发送一个请求来获得10个部分的数据。只要我检索5部分数据,我需要返回UI,然后在一段时间后,我需要发送其余部分的数据。有没有任何代码片段。请分享,如果存在。 – praneeth 2015-07-28 11:05:58

+0

这种API编程模型叫做什么?如果有人要查找更多信息? – 2017-12-07 01:01:47