使用安全管道交错WAI流

时间:2015-07-26 21:01:32

标签: http haskell streaming haskell-pipes haskell-wai

我使用管道和WAI来传输音频。问题是我需要在安全管道中查找一些数据,然后根据提取的信息选择响应头,然后继续将该管道作为响应主体进行流式传输。这是我现在拥有的,什么工作正常:

respond $ Wai.responseStream status200 headers $ \write flush -> do
    runSafeT $ runEffect $ do
        (mph, chunks) <- lift $ Mpeg.headerFromPipe pipe
        for chunks $ \chunk -> liftIO $ do
            write $ BB.byteString chunk
            flush     

respond是标准Application的funarg,而Mpeg.headerFromPipe是我向前看的计算:

respond :: Response -> IO ResponseReceived

Mpeg.headerFromPipe :: Monad m 
    => Producer ByteString m r
    -> m (Mpeg.Header, Producer ByteString m r)

pipe :: Producer ByteString (SafeT IO) ()

Wai.responseStream :: Status -> ResponseHeaders -> StreamingBody -> Response

type StreamingBody = (Builder -> IO ()) -> IO () -> IO ()

所以问题是:有没有办法在respondheaderFromPipe之间移动for以使用mph来选择要提供给responseStream的标头。我无法将headerFromPipefor拆分为两个不同的SafeT - 计算线程,因为第一个runSafeT将最终确定管道和chunks管道(这几次执行next,检查数据,回收东西以及与剩余部分链接的结果都会失败。

0 个答案:

没有答案