3

プロセスの最後に文字列のリスト全体を返すのではなく、それぞれがデータベース クエリの要素を表す文字列をストリーミングする方が理にかなっていると思いました。これにより、ブラウザーで最初の結果が早く得られる可能性があります。だから私はこれをRedstonewhich usesで実装しようとしましたShelf。これが私の基本的なテストです

@app.Route ('/testStream')
testSream ()
{
    StreamController<String> controller = new StreamController<String> ();

    () async
    {
        var initialTime = new DateTime.now();

        await new Future.delayed (new Duration (seconds: 1));
        controller.add("hello\n");

        await new Future.delayed (new Duration (seconds: 10));
        controller.add("chao\n");

        var finalTime = new DateTime.now().difference(initialTime);

        controller.add(finalTime.toString());

        controller.close();

    }();

    Stream<List<int>> intStream = controller.stream.map((s) => s.codeUnits);

    return new shelf.Response.ok (intStream);
}

いくつかのコンテキストのために、リンクされた人たちは、Facebook から取得したパターンで「テキストストリーミング」を使用して、ページの一部をすばやくレンダリングし、後者を (利用可能な場合) 挿入します。これを Playframework (Scala) で実装し、使用しますEnumerablesDart ストリームと同じように動作するように見えます。このビデオで見ることができます。

私のコードの問題は、 1秒後と10 秒"hello"後に表示されることを期待していたことです。私が得るのは、11 秒待ってから完全なテキストです。ご覧のとおり、aで応答しています。ここで、それぞれは、元のストリームからの文字列をバイトに変換したものです。"chao" Shelf.ResponseStream<List<int>>List<int>

これはシェルフの問題/機能ですか、それともレッドストーンが応答をいじって未来に変換していますか? 回避策はありますか?

編集

手に入れたいもの

1秒間何もありません。

1秒後

hello

11秒後

hello
chao
0:00:11.009000

私が本当に得るもの

1秒間何もありません。

11秒後

hello
chao
0:00:11.009000
4

0 に答える 0