2012-03-23 53 views
0
class MyController { 
    def startTwoMinuteTask = { 
     response.contentType = 'text/html' 
     def out = response.outputStream.destination 
     out.println 'Starting ...' 
     out.flush() 
     for (int i=0;i<10;i++) { 
      out.println " <br> $i" 
      out.flush() 
      Thread.sleep(1000) 
     } 
     return null 
    } 
} 

我想要显示1到10作为状态更新,唉grails缓冲整个事情。我如何完成这项工作?谢谢!Grails 1.3.7如何直接写入没有任何缓冲的输出流

回答

1

我知道这不是你的问题的实际答案,但你为什么不使用后台线程?

使用诸如Quartz plugin之类的东西可以让您分拆长期运行的流程。您可以让浏览器定期轮询更改(或者使用Atmosphere之类的功能进行推送)。

这样做的好处是你没有锁定打开连接。而且,并非所有的浏览器都会等待很长时间 - 有时会超时。 HTTP并非真正意图作为长时间运行的连接,特别是如果没有信息被传递。