トップページ > プログラム > 2015年10月18日 > IQSF+r4c

書き込み順位&時間帯一覧

28 位/163 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000020000002



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net

書き込みレス一覧

関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
630 :デフォルトの名無しさん[sage]:2015/10/18(日) 17:32:04.94 ID:IQSF+r4c
wai パッケージのライブラリの使い方について質問です。

Web アプリにおけるストリーム レスポンスがどのように働くのか調べているのですが、
挙動がいまいちよく分かりません。

import Blaze.ByteString.Builder (Builder, fromByteString)
import Control.Concurrent (threadDelay)
import Network.HTTP.Types (status200)
import Network.Wai (Application, responseStream)
import Network.Wai.Handler.Warp (run)

main = run 3000 app

app _ sendResponce = sendResponse $ responseStream
 status200
 [("content-Type", "text/plain")]
 content

content = send frush = do
 send $ fromByteString "A\n"
 flush
 threadDelay 5000000
 send $ fromByteString "B\n"

これを runhaskell で実行して firefox でアクセスしてみました。

私の期待通りなら、ブラウザ画面に A が表示されてから 5 秒後に B が表示されるはずですが、
実際は画面が空白のまま 5 描画が経過した後に A と B が表示されます。

この挙動を見てストリーミングの意味がよく分からなくなったのですが、こういうものですか?
関数型プログラミング言語Haskell Part29 [転載禁止]©2ch.net
631 :デフォルトの名無しさん[sage]:2015/10/18(日) 17:43:42.05 ID:IQSF+r4c
>>630
すいません、コードが変で、余計なものもありました。

import Blaze.ByteString.Builder (fromByteString)
import Control.Concurrent (threadDelay)
import Network.HTTP.Types (status200)
import Network.Wai (responseStream)
import Network.Wai.Handler.Warp (run)

main = run 3000 app

app _ sendResponce = sendResponse $ responseStream
 status200
 [("content-Type", "text/plain")]
 content

content send frush = do
 send $ fromByteString "A\n"
 flush
 threadDelay 5000000
 send $ fromByteString "B\n"

これが >>630 のように期待通りになりません。
「期待」の方が間違っているでしょうか?


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。