问题标签 [conduit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
239 浏览

haskell - WAI/Warp ResponseSource 清理

当 HTTP 客户端断开连接(或其他现实世界发生)时,无法弄清楚如何进行清理。我试图将我的包装Source成一个addCleanup,但它没有被调用。

这是我的无限源流字节串的最小示例:

当我用 http 请求点击它时,会出现“启动”通知并stream开始清除数据。但是,在我关闭连接后,没有“清理”。出现消息并且没有执行任何操作,从而在实际代码中泄漏资源。

0 投票
1 回答
203 浏览

haskell - 将 Haskell 的 WAI 请求转换为 Network.HTTP.Conduit 请求

我正在编写一个服务器,我需要沿着某个请求消息转发。该消息基本上是 POST(或 GET)消息,可能包含几兆字节的文件。此消息被转发到实际存储(或检索)文件的另一台服务器。

我正在使用 Yesod 框架。因此,使用getWaiRequest,我可以获得 WAI 请求。但是要发起一条新消息传递,我需要使用 Network.HTTP.Conduit 来解决它的惰性。所以我需要Request m在那个模块中做一个。但我不知道如何进行这种转换。WAIRequest只是一种数据类型,但 Conduit 是一种Request m类型,所以我不断收到错误消息,试图将内容复制过来。

有人能告诉我我是怎么做到的吗?如果没有,我如何在不使用 HTTP Conduit 的情况下将 WAI 请求传递给另一台服务器也一样好。

谢谢!

0 投票
1 回答
668 浏览

haskell - 使用管道的顺序二进制数据解码

目标是拥有一个具有以下类型签名的管道

管道应重复解析通过 TCP/IP(使用包)ByteString -> a接收的协议缓冲区(使用函数)。network-conduit

有线消息格式为

(花括号不是协议的一部分,仅在此处用于分隔实体)。

第一个想法是用来sequenceSink重复应用一个Sink能够解析一个 ProtoBuf 的:

它不起作用(仅适用于第一个协议缓冲区),因为似乎已经从源读取了许多“剩余”字节,但没有被CB.take丢弃。

而且我发现没有办法将“其余部分推回源头”。

我完全错误地理解了这个概念吗?

PS:即使我在这里使用协议缓冲区,问题也与协议缓冲区无关。为了调试问题,我总是使用{length}{UTF8 encoded string}{length}{UTF8 encoded string}...与上述类似的管道 ( utf8StringConduit :: MonadResource m => Conduit ByteString m Text)。

更新:

我只是试图用()剩余的字节替换状态(上面示例中没有状态),并CB.take通过调用一个函数替换调用,该函数首先消耗已经读取的字节(从状态)并await仅在需要时调用(当状态为不够大)。不幸的是,这也不起作用,因为只要 Source 没有剩余字节,sequenceSink就不会执行代码,但状态仍然包含剩余的字节 :-(。

如果您应该对代码感兴趣(没有优化或非常好,但应该足以测试):

0 投票
1 回答
349 浏览

haskell - How to collect output from pipes to file in Haskell

I have a producer pipe and I have used the print pipe. I would like to write the output to a file. If I use Control.Data.sinkFile, like

I get a type error:

How do I convert sinkFile to a pipe which can be composed. is there a Strict vs. Lazy question?

0 投票
1 回答
359 浏览

haskell - Attoparsec:跳过括号中的术语?

我正在尝试在第 5 列中使用 JSON 制作适合导入到 mongoDB 的大型 TSV 文件。特别是我想将顶级且仅顶级关键字段更改为_id。这是我到目前为止所拥有的,它似乎工作但很慢:

根据分析器,58.7% 的时间花在括号中,19.6% 用于 keyTo_id,17.1% 用于 main。

如果括号匹配,肯定有更好的方法来返回括号中的术语吗?

我简要地查看了 attoparsec-conduit,但我不知道如何使用该库,甚至不知道这是否是它可以用来做的事情。

编辑:更新了代码。数据来自openlibrary.org,例如http://openlibrary.org/data/ol_dump_authors_latest.txt.gz

0 投票
1 回答
108 浏览

haskell - unwrapResumable 中的“释放”怎么办?

我写了一个简单的 Wai-to-uwsgi 代理,但在这样做时,我不得不使用unwrapResumable. 这给出了Pipe最终需要调用的解包和“释放”函数。release 函数的类型是ResourceT IO (),我想我想用我当前的资源注册它,但要做到这一点,我需要 release 只是IO ()。我应该用释放功能做什么?

0 投票
1 回答
205 浏览

haskell - 神秘关闭的把手案例

首先我会给你代码,然后是错误,然后是一些类型信息。问题是:我怎样才能弄清楚发生了什么?我该如何解决这个问题?

这编译得很好。这是我运行编译后的代码时发生的情况

body是以下类型

感谢反馈,我不知道如何开始解决此问题。

0 投票
1 回答
947 浏览

haskell - Aeson derivedJSON 结合管道 sinkParser

继续我对管道和 aeson 的探索,我将如何使用我自己的数据类型,而不是使用Yesod bookValue中的这个(稍微修改过的)代码片段。

基本上,我想将类型更改dispatch为 JSONRequest -> IO JSONRequest。如何告诉解析器使用我自己的 fromJSON 派生实例?

我尝试只添加一个类型声明,为 json 上的多态返回类型祈祷,但我意识到它严格用于 Value。

0 投票
1 回答
961 浏览

haskell - 在管道内使用持久化

首先,我想要完成的任务的简化版本:我有几个大文件(总计 30GB),我想要修剪重复条目。为此,我建立了一个数据哈希数据库,并逐个打开文件,对每个项目进行哈希处理,并将其记录在数据库和输出文件中,前提是其哈希尚未在数据库中。

我知道如何使用迭代器、枚举器来做到这一点,并且我想尝试使用管道。我也知道如何使用管道,但现在我想使用管道和持久性。我遇到了类型问题,可能还有ResourceT.

这里有一些伪代码来说明这个问题:

问题出在dbAction功能上。我想访问这里的数据库,自然而然。由于它所做的动作基本上只是一个过滤器,我首先想到的是这样写:

我得到的具体错误是:

请注意,这可能是由于我在设计类型签名时做出的错误假设。如果我注释掉类型签名并删除该lift语句,则错误消息将变为:

所以这意味着我们根本无法PersistStore通过ResourceT?

如果不使用,我也无法编写自己的导管CL.mapMaybeM

这导致了另一个我不完全理解的类型错误。

所以,我的问题是:是否可以像我打算在管道内一样使用持久性?如果,如何?我知道,因为我可以liftIO在管道内使用,所以我可以去使用,比如说HDBC,但我想明确地使用 persistent 以了解它是如何工作的,并且因为我喜欢它的 db-backend 不可知论。

0 投票
1 回答
211 浏览

javascript - 将 console.log 与管道一起使用

我正在尝试调试在管道工具栏上运行的用 javascript 编写的脚本。现在我正在简单地使用

但这在脚本变大时出现许多警报的情况下非常令人不安。我更愿意将日志或调试消息写入 FireBug 或 Chrome 的控制台,其中:

因为这更合理,但是当从我包含在管道工具栏上的 html 组件中的 javascript 文件运行此代码时,此代码无效。
我真的尝试过使用管道工具栏 api 研究这个和类似的问题,但我发现它们在堆栈上并不是真正常见的主题.. 有人知道论坛或管道 api 使用的良好信息资源吗?他们的官方页面对我来说有点混乱。

真的很感谢任何帮助!