Grails 1.3.7 Как писать напрямую в выходной поток без какой-либо буферизации - PullRequest
0 голосов
/ 23 марта 2012
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 Ответ

1 голос
/ 24 марта 2012

Я знаю, что это не реальный ответ на ваш вопрос, но почему вы не используете фоновый поток?

Использование чего-то вроде Quartz plugin позволит вам раскрутитьсядлительный процесс.Вы можете периодически проверять изменения в браузере (или использовать такую ​​функцию, как Атмосфера для толчка, если можете).

Преимущество этого заключается в том, что вы не блокируете открытое соединение.Кроме того, не все браузеры будут ждать так долго - иногда они останавливаются.HTTP на самом деле не предназначен для долговременного соединения, особенно если информация не передается.

...