问题标签 [haskell-warp]

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 回答
71 浏览

haskell - 仅在用户登录时接受 WAI Websocket 请求

我正在使用wai-websockets 包(版本3.0.1.1),如果用户已经登录,我只想打开一个套接字。我有一个中间件可以处理所有身份验证问题,如果用户是登录将User记录放入VaultWAI 请求中。

是否有某种方法可以Request从访问 WAI ServerApp,或者在Request它开始之前检查 WAI 并将User值传入?

0 投票
1 回答
81 浏览

haskell - 在 Haskell 运行时重新评估常量

我正在获取这个 JSON,将它用于一些计算,并希望返回一个结果,也使用 warp。现在 getJSON 显然是不可变的,根本不会改变。如何在每个 http 请求上重新评估 getJSON?最干净的方法是什么?

0 投票
2 回答
315 浏览

haskell - 流式传输字节串作为 WAI HTTP 服务器响应正文

我有一个值body :: BS.ByteString (ResourceT IO) (),来自一个基于BS.readFile. 我想将该值作为来自WaiApplication的响应正文进行流式传输。有一个助手,streamingResponse它接受 type 的值Stream (Of ByteString) IO r。我可以通过使用将我的转换BS.ByteString (ResourceT IO) ()Stream (Of ByteString) (ResourceT IO) ()BS.toChunks但它包含一个额外的ResourceT单子层。传递bodystreamingResponse我:

我尝试了各种方法,例如在 runResourceT 中包装东西、绑定和提升值等,但真的不知道如何进行。如果需要额外的上下文,这是完整项目中的行

更新0

hoist runResourceT body似乎类型检查。有人还向我推荐了一个 Haskell Pipes thread,这可能是一个非常相关的问题,并且可能暗示了一个解决方案。

0 投票
1 回答
211 浏览

haskell - WAI 教程 - 没有实例(显示响应)

同样是这里的 n00b:使用文档中的以下代码尝试 Warp 和 WAI。

在 GHCi 中运行 plainIndex 会返回:

两个问题合二为一:你能帮我解决这个问题吗,并且对此进行扩展:我是唯一一个在遵循文档示例时经常遇到此类问题的人?

0 投票
1 回答
87 浏览

ajax - 如何正确制定wai queryString?

我正在尝试制定代码,这将允许我在 html 输入字段中打印一些内容,然后 Haskell 代码将返回我在下一个 div 中打印的内容(从长远来看,这是一个 Ajax 搜索引擎)。两者之间的联系似乎已经建立,但以一种非常奇怪的方式。不仅如此,我不太明白如何按以下顺序为 queryString req 制作案例。这是 Haskell 代码:

这是我的搜索页面:

0 投票
1 回答
61 浏览

multithreading - throwTo warp tls 线程完全挂起

我有一个带有经纱服务器的 Yesod 应用程序,它的一些功能取决于异步异常。最近出现了将其迁移到 https 的需要,我使用 package 进行了迁移warp-tls。但是现在我不能通过向ThreadKilled它抛出异常来杀死扭曲线程,该throwTo函数只是挂起并且什么都不做。

考虑以下示例。这里我们用 监控warp线程的状态,MVar ()线程运行时为空,线程被杀死时有()值。

当您拥有 时runApp = runAppNormal,您将收到Succesfully killed warp thread消息,应用程序将退出。

当您拥有 时runApp = runAppTls,您将收到Couldn't kill warp thread消息,并且该应用程序将挂起并继续服务。

那么如何摆脱这种异常拦截行为呢?或者至少有没有办法以任何其他方式杀死 warpTls 线程?

0 投票
1 回答
90 浏览

haskell - 如何将类型化进程通过管道传输到 wai-conduit 的 responseSource?

我想让 warp 运行一个进程,然后用该进程的输出响应。假设输出大于服务器的 RAM;加载整个输出然后响应不是一种选择。我以为我可以使用类似的东西来完成此任务

responseSource用途ConduitT i (Flush Builder) IO ()createSource用途ConduitT i ByteString m ()。我不知道如何将ByteString管道转换为Flush Builder管道。


所以我设计了一个似乎可行的解决方案,但遗憾的是它的定义不那么简单:

. 这有必要吗,即使我可以尝试通过包裹mkStreamSpec或其他方式来美化它?还是我缺少更简单的方法?


编辑:对解决方案的评论:

intersperseC让我ChunkFlush一起使用。这解决了Flush Builder/ByteString转换问题。我还没有测试过它,但它看起来是正确的,我相信它已经被使用过。

然而,我发现

过早关闭进程句柄。因此我需要自己管理管道:使用createPipe而不是createSource. 但这意味着我需要hClose在最后调用,这意味着我需要一个返回的响应处理程序IO ();唯一能做的(除了responseRaw)是responseStream,它StreamingBody用作Conduit的替代品。因此,我得出结论,需要我的原始解决方案,并且 Conduit 不能用于流式处理。如果不正确,请随时纠正。

0 投票
0 回答
167 浏览

haskell - 无论如何要更改默认的keep-alive close in warp?

似乎保持活动连接在 60 年代关闭。是否可以在warp中配置它?

0 投票
1 回答
106 浏览

haskell - Warp / Scotty在请求结束时没有终止线程/资源

我遇到了一个问题,我的 Scotty 应用程序似乎没有终止旧的 HTTP 请求线程。最终,在大量(10-20)个并发请求之后,我遇到了一个错误 with too many DB connections libpq: failed (FATAL: sorry, too many clients already)


这也发生在 Warp 应用程序(Scotty)中:


为什么会这样?有没有一种简单的方法可以在最后“完成”请求?

我可以手动关闭连接,但理想情况下,我认为用任何其他相关资源终止线程是理想的。


我已经通过在 postgres 中运行以下命令来验证它是否保持连接打开:

Scotty 似乎需要几秒钟才能自动关闭它(在请求完成后)。

0 投票
0 回答
91 浏览

haskell - 如何使用 Haskell 中间件添加 HTTP 请求正文的请求和响应的特定表示

如何在请求记录器中添加请求和响应正文的特定表示?我希望能够有一些typeclass可以让我实现这种表示。在Network.Wai.Middleware.RequestLogger.JSON我可以看到请求记录器是如何实现的。

因此,如果我要收到请求:

我只想通过电子邮件发送:

我通过一些类型类来做到这一点:

这将允许我轻松使用我不想修改其默认行为的类型的 toJSON 和 FromJSON。是否也可以修改它,以便当我的应用程序像“消息”字段或“活动”字段一样运行时,我可以添加一些任意上下文。