在我的GHC Haskell
应用程序中使用stm,network-conduit和conduit,我为每个socket自动分叉使用了一个strand runTCPServer
.Strands可以通过使用广播TChan与其他线路进行通信.
这展示了我想如何建立管道"链":
所以,我们这里有两个源(每个都绑定到辅助管道),它们产生一个接受并转入的Packet
对象,然后发出套接字.对于两个输入的有效(性能是一个问题),我遇到了很大的困难.encoder
ByteString
如果有人能指出我正确的方向,我将不胜感激.
既然我没有尝试就发布这个问题是不礼貌的,我会把我以前在这里尝试过的东西放进去;
我已经编写/编写了一个函数,它(阻塞)从TMChan(可关闭的通道)生成一个源;
-- | Takes a generic type of STM chan and, given read and close functionality,
-- returns a conduit 'Source' which consumes the elements of the channel.
chanSource
:: (MonadIO m, MonadSTM m)
=> a -- ^ The channel
-> (a -> STM (Maybe b)) -- ^ The read function
-> (a -> STM ()) -- ^ The close/finalizer function
-> Source m b
chanSource …
Run Code Online (Sandbox Code Playgroud) 可以使用流(懒惰列表)从一个数字(例如两个为了简单)中提取需求.Iteratees可用于处理来自单一来源的数据.
是否有类似Iteratee的功能概念来处理多个输入源?我可以想象一个Iteratee,它的状态信号来自它想要拉动的源.