问题标签 [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.
haskell - 仅在用户登录时接受 WAI Websocket 请求
我正在使用wai-websockets 包(版本3.0.1.1),如果用户已经登录,我只想打开一个套接字。我有一个中间件可以处理所有身份验证问题,如果用户是登录将User
记录放入Vault
WAI 请求中。
是否有某种方法可以Request
从访问 WAI ServerApp
,或者在Request
它开始之前检查 WAI 并将User
值传入?
haskell - 在 Haskell 运行时重新评估常量
我正在获取这个 JSON,将它用于一些计算,并希望返回一个结果,也使用 warp。现在 getJSON 显然是不可变的,根本不会改变。如何在每个 http 请求上重新评估 getJSON?最干净的方法是什么?
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
单子层。传递body
给streamingResponse
我:
我尝试了各种方法,例如在 runResourceT 中包装东西、绑定和提升值等,但真的不知道如何进行。如果需要额外的上下文,这是完整项目中的行。
更新0
hoist runResourceT body
似乎类型检查。有人还向我推荐了一个 Haskell Pipes thread,这可能是一个非常相关的问题,并且可能暗示了一个解决方案。
haskell - WAI 教程 - 没有实例(显示响应)
同样是这里的 n00b:使用文档中的以下代码尝试 Warp 和 WAI。
在 GHCi 中运行 plainIndex 会返回:
两个问题合二为一:你能帮我解决这个问题吗,并且对此进行扩展:我是唯一一个在遵循文档示例时经常遇到此类问题的人?
ajax - 如何正确制定wai queryString?
我正在尝试制定代码,这将允许我在 html 输入字段中打印一些内容,然后 Haskell 代码将返回我在下一个 div 中打印的内容(从长远来看,这是一个 Ajax 搜索引擎)。两者之间的联系似乎已经建立,但以一种非常奇怪的方式。不仅如此,我不太明白如何按以下顺序为 queryString req 制作案例。这是 Haskell 代码:
这是我的搜索页面:
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 线程?
haskell - 如何将类型化进程通过管道传输到 wai-conduit 的 responseSource?
我想让 warp 运行一个进程,然后用该进程的输出响应。假设输出大于服务器的 RAM;加载整个输出然后响应不是一种选择。我以为我可以使用类似的东西来完成此任务
但responseSource
用途ConduitT i (Flush Builder) IO ()
和createSource
用途ConduitT i ByteString m ()
。我不知道如何将ByteString
管道转换为Flush Builder
管道。
所以我设计了一个似乎可行的解决方案,但遗憾的是它的定义不那么简单:
. 这有必要吗,即使我可以尝试通过包裹mkStreamSpec
或其他方式来美化它?还是我缺少更简单的方法?
编辑:对解决方案的评论:
intersperseC
让我Chunk
和Flush
一起使用。这解决了Flush Builder
/ByteString
转换问题。我还没有测试过它,但它看起来是正确的,我相信它已经被使用过。
然而,我发现
过早关闭进程句柄。因此我需要自己管理管道:使用createPipe
而不是createSource
. 但这意味着我需要hClose
在最后调用,这意味着我需要一个返回的响应处理程序IO ()
;唯一能做的(除了responseRaw
)是responseStream
,它StreamingBody
用作Conduit的替代品。因此,我得出结论,需要我的原始解决方案,并且 Conduit 不能用于流式处理。如果不正确,请随时纠正。
haskell - 无论如何要更改默认的keep-alive close in warp?
似乎保持活动连接在 60 年代关闭。是否可以在warp中配置它?
haskell - Warp / Scotty在请求结束时没有终止线程/资源
我遇到了一个问题,我的 Scotty 应用程序似乎没有终止旧的 HTTP 请求线程。最终,在大量(10-20)个并发请求之后,我遇到了一个错误 with too many DB connections libpq: failed (FATAL: sorry, too many clients already)
。
这也发生在 Warp 应用程序(Scotty)中:
为什么会这样?有没有一种简单的方法可以在最后“完成”请求?
我可以手动关闭连接,但理想情况下,我认为用任何其他相关资源终止线程是理想的。
我已经通过在 postgres 中运行以下命令来验证它是否保持连接打开:
Scotty 似乎需要几秒钟才能自动关闭它(在请求完成后)。
haskell - 如何使用 Haskell 中间件添加 HTTP 请求正文的请求和响应的特定表示
如何在请求记录器中添加请求和响应正文的特定表示?我希望能够有一些typeclass
可以让我实现这种表示。在Network.Wai.Middleware.RequestLogger.JSON
我可以看到请求记录器是如何实现的。
因此,如果我要收到请求:
我只想通过电子邮件发送:
我通过一些类型类来做到这一点:
这将允许我轻松使用我不想修改其默认行为的类型的 toJSON 和 FromJSON。是否也可以修改它,以便当我的应用程序像“消息”字段或“活动”字段一样运行时,我可以添加一些任意上下文。