问题标签 [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 投票
2 回答
1942 浏览

haskell - 使用 Warp/WAI 处理 POST

如何使用Network.Waiand从 POST 请求中检索数据Warp

比如说,我有一个简单的网页

当用户点击提交时,我该如何检索这些数据?我知道如何获取 GET 数据(queryString

例如

0 投票
1 回答
270 浏览

haskell - 使用长寿命资源(文件句柄)扭曲 Web 服务

我试图了解如何使用 warp 编写 Web 服务,该服务具有我希望从我的所有请求中访问的长期资源(即我希望资源在服务器的整个生命周期内都存在,而不是每个请求都存在)。我假设这是 ResourceT 的用途,但我不确定我实际上是如何做到这一点的。

我的特殊用途是我想公开一个文件句柄,我目前已经将它包裹在状态单子中。如果在使用 warp 和 ResourceT 时这没有意义,我很高兴改变这种方法。此代码的早期版本可以在代码审查中看到:https ://codereview.stackexchange.com/questions/9177/my-simple-haskell-key-value-file-store

提前致谢,

马特

0 投票
1 回答
1011 浏览

haskell - 如何在守护模式下运行 Warp?

我一直在研究使用 Haskell Warp 构建的像素服务器,并且一直在努力研究如何在守护模式下运行它。

Warp 效果很好 - 我可以使用runNetwork.Wai.Handler.Warp 来服务 HTTP,runTLS使用 Network.Wai.Handler.WarpTLS 来服务 HTTPS,并且我可以通过生成一个新线程来运行两者:

我的问题是弄清楚如何使用MissingH (System.Daemon) 中的 detachDaemon 使我的服务器分离并在 Ubuntu 的后台运行。

在我的 Main.hs 中,我尝试添加detachDaemon如下操作:

但是程序然后只是静默退出而没有错误,并且在我运行时没有任何显示ps -ef | grep snowhuskyd

我应该如何使用detachDaemon- Warp 甚至可以吗?我找不到detachDaemon在 Web 上使用的单个示例 - 任何帮助都将不胜感激!

0 投票
1 回答
1073 浏览

haskell - 将 AJAX 与 warp HTTP 服务器一起使用

我在尝试了解 WARP 如何与客户端进行潜在交互时遇到了一些麻烦。如果我要通过 WARP 构建我的服务器端,并且有一个 Javascript 客户端。我可以假设使用 AJAX 作为客户端和服务器端之间的桥梁吗?

0 投票
2 回答
494 浏览

haskell - 如何将 MonadThrow 实例添加到 Warp 服务器中的 ResourceT Monad Transformer

我正在尝试使用 Warp 构建一个简单的反向代理服务器(主要是为了我自己的启发,因为还有很多其他现成的选项)。

到目前为止,我的代码大部分是从 Warp 文档中提取的(将输出写入文件只是一个临时测试,再次从文档中提取):

当我尝试在 ResourceT Monad 中运行 Network.HTTP 操作时,编译器正确地要求它是 MonadThrow 的一个实例。我的困难是如何将它添加到 monad 堆栈或将它的实例添加到 ResourceT。以下代码的编译器错误是:

如果我删除 HTTP 行,则不再需要 MonadThrow 实例,并且一切正常。

如果我将一个新的自定义 monad 定义为 MonadThrow 的实例,我如何让服务器使用它实际运行?寻找在我的堆栈中引入这种异常处理的正确方法(甚至只是满足编译器)。

谢谢/O

0 投票
2 回答
1321 浏览

haskell - Warp/WAI 的线程安全状态

我想编写一个 Web 服务器,将其状态存储在一个带有/的State单子中。像这样的东西:waiwarp

当然,注释行不起作用。目的是将计数器存储在 state monad 中,并在每次请求时显示其递增的值。

另外,我如何获得线程安全?warp 是顺序还是并行运行我的中间件?

该州有哪些可用选项 - 除了IORef我可以在这种情况下使用之外,还有什么可以使用的吗?

我知道国家提供安全,但似乎 wai 不允许国家。

我只需要一个可以从其他地方调用的非常简单的单线程 RPC。Haxr包需要一个单独的 Web 服务器,这是一个矫枉过正。请参阅从 Node.JS 调用 Haskell - 它没有任何建议,因此我使用 Wai/Warp 和 Aeson 编写了一个简单的服务器。但似乎 WAI 旨在支持并发实现,因此它使事情变得复杂。

0 投票
2 回答
394 浏览

windows - 在 Windows 中的 WAI 上运行 Warp 时出现问题

我为 (Wai) 上的 (Warp) 编写了一个简单的 Hello World 应用程序。它在 Ubuntu Linux 中运行良好,更复杂的应用程序也是如此。但我什至无法让这个 Hello World 应用程序在 Windows 中运行。我在 Windows 7 Home Premium SP1 32 位上使用 Haskell 平台(安装文件 2012.2.0.0)。

这是代码(适用于 Linux):

这些是加载代码并运行(主要)时的 GHCI 消息:

加载代码后,Web 服务器似乎没有运行。

我想我可能会遇到一些常见的问题 - 如果是这样,请告诉我。

提前感谢所有反馈。

更新:正如下面的答案中所述,这些错误完全是由于 Ctrl-C 操作,杀死运行时,而不是问题中 Wai/Warp 的意外行为的一部分。

如果我按 Ctrl-C 几次以爆发,我会收到这些消息,或其中一些消息:

0 投票
1 回答
131 浏览

haskell - 处理 OPTIONS 方法的最简单方法是什么?

我正在 angular.js 中为我的 Yesod JSON 服务器编写一个客户端。在检查标头流量时,Chrome 似乎正在发送一个 OPTIONS 方法,我的处理程序拒绝了该方法。调查表明我应该发回这样的东西:

看着脚手架,我发现它makeApplication开始了我想要遵循的路径:

最初,我认为我需要修改conf,但据我所知,管理操作系统环境。全局更改响应标头最直接的地方在哪里?

0 投票
2 回答
236 浏览

haskell - 如何在处理下一个请求之前强制 yesod/warp 关闭打开的文件句柄?

我编写了一个小型服务器,它接受作为 POST 请求的注册并通过将它们附加到文件来持久化它们。一旦我将此服务器置于负载状态(我使用具有 50 个并发线程和 10 个重复计数的 Apache JMeter,并且帖子包含一个包含约 7k 文本数据的字段),我就会得到很多“资源繁忙,文件是锁定”错误:

这是代码的精简版本:

我故意编译了没有 的代码-threaded,并且操作系统只显示一个正在运行的线程。尽管如此,在我看来,请求并没有完全序列化,并且在旧请求写入磁盘之前已经处理了一个新请求。

您能告诉我如何避免错误消息并确保成功处理所有请求吗?性能还不是问题。

0 投票
1 回答
1544 浏览

haskell - 如何使用 Warp 和 Aeson 通过 HTTP 传递 JSON

我想创建一个在 Haskell 上运行的高性能基于 HTTP 的 API,使用warp作为 HTTP 后端。

服务器应根据请求返回 JSON 数据。此数据应使用Aeson序列化

然而,warp需要一个响应对象,而 Aeson 返回lazy ByteStrings。

如何将两个库绑定在一起?对于这个问题的范围,我对查询解析或路由不感兴趣,但在一个示例中,如何将两个库绑定在一起以提供具有正确标头的正确 JSON。

注意:这个问题故意不显示任何研究工作,因为它是以问答方式回答的。如果您需要研究工作,请参阅我的答案。