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 正在缓冲整个事情。我该如何进行这项工作?谢谢!

4

1 回答 1

1

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

使用Quartz 插件之类的东西可以让你摆脱长时间运行的过程。您可以让浏览器定期轮询更改(如果可以的话,也可以使用诸如Atmosphere之类的功能进行推送)。

这样做的好处是您不会锁定打开的连接。此外,并非所有浏览器都会等待那么久——有时它们会超时。HTTP 并不是真正打算用作长时间运行的连接,尤其是在没有传递任何信息的情况下。

于 2012-03-24T17:21:03.200 回答