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 に答える