我无法运行一个简单的scalaz-stream示例,从TCP读取并写入标准输出。
val src = tcp.reads(1024)
val addr = new InetSocketAddress(12345)
val p = tcp.server(addr, concurrentRequests = 1) {
src ++ tcp.lift(io.stdOutLines)
}
p.run.run
它只是静静地待在那里,什么也不打印。
我也尝试过使用to
进行各种排列组合,总是需要使用tcp.lift
来获取Process[Connection, A]
。tcp.server(addr, concurrentRequests = 1)(src) map (_ to tcp.lift(io.stdOutLines))
甚至无法编译。
我需要将源流和打印流合并吗?我在原始拉取请求中找到的一个示例,用tcp
替换nio
,似乎是这样指示的,但wye
现在不再出现在Process
上,所以遗憾地产生了混淆。
编辑事实证明,除了保罗解释的类型问题之外,您还需要“手动”运行内部进程,例如通过执行p.map(_.run.run).run.run
。我不认为这是惯用的做法,但它确实有效。
tcp.lift
的情况下通过io.stdOutLines
吗?但似乎仍然无法从流中获取任何内容。 - Joe Kearneytcp.lift
后,这个程序可以工作,但请注意你必须使用p.map(_.run.run).run.run
来运行内部进程。 - Joe Kearney