text/event-stream
を使用してHTTP接続でstdinをストリーミングしたいとします。 Network.Wai.EventSourceは良い候補のように見えます。ストリームをWai.EventSourceに転送
私はこのコードを使用してみました:
(と思う)んimport Network.Wai
import Network.Wai.EventSource
import Network.Wai.Middleware.AddHeaders
import Network.Wai.Handler.Warp (run)
import qualified Data.ByteString.Lazy as L
import qualified Data.ByteString.Lazy.Char8 as C
import Blaze.ByteString.Builder.ByteString
toEvent :: [L.ByteString] -> ServerEvent
toEvent s = ServerEvent {
eventName = Nothing,
eventId = Nothing,
eventData = map fromLazyByteString s
}
createWaiApp :: IO L.ByteString -> Application
createWaiApp input = eventSourceAppIO $ fmap (toEvent . C.lines) input
main :: IO()
main = run 1337 $ createWaiApp L.getContents
:ライン
- は、標準入力を読み込みすべての行について(これは間違っていると思われます。おそらく複数のイベントがあるはずです)
- ビルド私はこれを実行すると
IO ServerEvent
- からWAIアプリケーションがポート1337
への応用をバインドします(たとえば、 ping -c 5 example.com | stack exec test-exe
を使用して)、stdin全体が読み取られるまで応答しません。
標準入力から行を読み込むたびに、HTTP接続をフラッシュするWaiアプリケーションを作成するにはどうすればよいですか?