如何在异步/并发模式下运行Web服务器(Warp)?

问题描述 投票:0回答:1

我正在使用https://hackage.haskell.org/package/warp-3.3.24/docs/Network-Wai-Handler-Warp.html

我对haskell并发不太了解。假设我想在不同的端口上运行两个服务器:

所以我这样做:

 do
   Warp.run 3000 waiApp
   Warp.run 3002 waiApp

然后服务器在 3000 上运行正在工作,但它永远不会到达下一行。

我尝试过:

 do
   forkIO $ Warp.run 3000 waiApp
   forkIO $ Warp.run 3002 waiApp

但是好像不行,每个人fork后就停止了。

如何让它正常工作?我也想允许下面的代码也被执行。

更新:

所以目前的解决方案就是添加

forever (threadDelay 1000)

最后

main
,我想知道这是否是正确的方法。

haskell concurrency haskell-wai haskell-warp
1个回答
2
投票

所以,我们不应该让主线程终止。像这样的东西应该有效:

 do
   a1 <- Async.async $ Warp.run 3000 waiApp
   a2 <- Async.async $ Warp.run 3002 waiApp
   ...
   Async.waitAny [a1, a2]
© www.soinside.com 2019 - 2024. All rights reserved.