Grails 1.3.7 Как писать напрямую в выходной поток без какой-либо буферизации

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 буферизует все это. Как мне заставить это работать? Спасибо!


person Bob Herrmann    schedule 23.03.2012    source источник


Ответы (1)


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

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

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

person OverZealous    schedule 24.03.2012