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正在缓冲整个事情。我该如何工作?谢谢!
答案 0 :(得分:1)
我知道这不是你问题的实际答案,但为什么你不使用后台线程?
使用类似Quartz plugin之类的东西可以让你脱离长时间运行的过程。您可以定期让浏览器轮询更改(如果可以,可以使用Atmosphere等功能进行推送。)
这样做的好处是你没有锁定打开连接。此外,并非所有浏览器都会等待那么久 - 有时它们会超时。 HTTP实际上不是一个长期运行的连接,特别是如果没有传递信息。