Grails 1.3.7如何直接写入输出流没有任何缓冲

时间:2012-03-23 16:43:56

标签: grails grails-controller

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

1 个答案:

答案 0 :(得分:1)

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

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

这样做的好处是你没有锁定打开连接。此外,并非所有浏览器都会等待那么久 - 有时它们会超时。 HTTP实际上不是一个长期运行的连接,特别是如果没有传递信息。