问题标签 [haskell-wai]

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

haskell - 如何在一个简单的 wai 应用程序中使用 wai-handler-devel

我有使用 wai 的基本“hello world”应用程序设置,并且想使用 wai-handler-devel,但我不确定如何去做,也找不到在 wai 项目中使用它的任何示例。

我需要做什么才能让 wai-handler-devel 使用基本的 wai 应用程序?

注意:如果您遇到“wai-handler-devel: command not found”问题,这里有一个修复(https://gist.github.com/1499226 )

0 投票
4 回答
1203 浏览

haskell - 如何使用 WAI(原始请求正文)使用管道

我正在使用 scotty,它是 WAI 的一个类似 sinatra 的包装器。我想将原始请求正文作为字节字符串获取,以便可以将其解析为 json。以下是接近的。这类似于其他关于使用 WAI 使用 body 的问题,但不同的是因为我希望 body 作为字节串,并且因为我在不同的 monad 中,ActionM

这显然行不通,我想我需要某种升降机之类的东西,但我不知道该用什么。liftIO是不对的,并且lift给了我奇怪的错误。

http://hackage.haskell.org/packages/archive/scotty/0.0.1/doc/html/Web-Scotty.html

http://hackage.haskell.org/packages/archive/wai/latest/doc/html/Network-Wai.html

0 投票
1 回答
270 浏览

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

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

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

提前致谢,

马特

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 投票
1 回答
337 浏览

haskell - wai 的意外管道行为

我正在尝试使用 wai 编写一个非常微不足道的“回声”网络应用程序;我想要它做的就是回复发布给它的数据(我真的不关心该方法,但我正在使用 curl 并且 curl 正在使用 POST,所以这就是我想要的)。我的微不足道的网络服务器是这样的:

我期望这样做基本上是将请求正文与响应正文联系起来,这样当我运行curl --data @/usr/share/dict/words localhost:3000; 它会向我吐出我的话。相反,它给出了一个空的身体。使用“-v”运行 curl 表明我的应用正在回复“200 OK”并且没有数据。我不确定我在这里做错了什么。

如果我用这个替换应用程序功能:

并添加一个 OverloadedStrings 杂注以允许“Hello World”部分工作,然后我确实看到我的应用程序将整个请求正文打印到标准输出,所以我知道 curl 正在正确提交数据。我还将“Hello World”打印到 curl 标准输出,所以我知道 curl 按我的预期工作。在将 requestBody 绑定到 ResponseSource 的地方,我一定做错了,但我没有看到。

0 投票
1 回答
197 浏览

haskell - 在哪里将“始终运行”线程添加到 Yesod 应用程序

我正在编写一个 Yesod 应用程序,但它还需要分叉几个非 Web 服务。(UDP监听器、TCP监听端口等)

拼接叉子的正确位置在哪里,这样可以无缝地工作,无论我的应用程序是在“yesod devel”中运行还是部署用于生产。

PS我真的只想添加一个伪Main,它将由任何一个通过WAI运行应用程序的网络服务器分叉(在服务启动时)。

0 投票
1 回答
260 浏览

http - 带有 WAI 的斐波那契 Web 服务

我正在尝试使用 WAI 编写一个简单的斐波那契网络服务器,但我就是不知道类型。这段代码是我想做的事情的本质,但它被破坏了。该getQueryArg函数返回一个Maybe ByteString,我想在我的fibHandler函数中使用它。

  1. 如何正确处理Maybe我的fibHandler?
  2. 如何在 Maybe 上调用 putStrLn?我正在尝试fmap,但我似乎无法做到这一点。

 

[更新:此代码的工作副本在这里:https ://gist.github.com/3145317 ]

0 投票
1 回答
108 浏览

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

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

0 投票
1 回答
224 浏览

haskell - WAI 应用程序适用于 ghci,但不适用于 runhaskell

我编写了一个简单的 WAI 应用程序,它使用 ReaderT 来允许访问请求,如下所示:

handle执行大部分处理的函数在哪里。然后我在我的应用程序中调用它:

runhaskell main.hs给了我以下内容:

这让我感到困惑有两个原因:

  1. 我不知道为什么它期待那种类型
  2. 调用resp <- runReaderT (handle a) defaultRequest在 GHCI 中有效!

为什么会这样?

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 几次以爆发,我会收到这些消息,或其中一些消息: