gpt4 book ai didi

haskell - 关于 scotty Haskell Web 框架的简单问题

转载 作者:行者123 更新时间:2023-12-04 02:58:43 24 4
gpt4 key购买 nike

考虑最简单的 scotty 应用程序:

{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty

import Data.Monoid (mconcat)

main = scotty 3000 $ do
get "/:word" $ do
beam <- param "word"
html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]

我将此代码放入 app.hs并用 GHC 编译它。我用 ./app 运行它.简单的。
  • 当人们访问该网站时,究竟会发生什么?只有一个./app那正在运行。每当每个用户触发 get "/:word" $ do 时,是否会在同一个应用程序中创建一个新线程?线?可以存在多少这样的线程?千?万?
  • 运行后./app它显示消息 Setting phasers to stun... (port 3000) (ctrl-c to quit) .但它没有显示更多。它不输出传入的网络请求。我怎样才能让它做到这一点?这对于记录目的很有用。
  • 最佳答案

    假设您使用 GHC,对 scotty 服务器的每个请求本质上都会创建一个由 GHC 运行时调度的“绿色线程”。您可以轻松地同时运行数千个。

    Scotty 本身不做任何请求记录,但因为它是建立在 WAI 之上的。 ,您可以使用任何存在的中间件组件,例如 RequestLogger .

    {-# LANGUAGE OverloadedStrings #-}
    import Web.Scotty
    import Network.Wai.Middleware.RequestLogger

    import Data.Monoid (mconcat)

    main = scotty 3000 $ do
    middleware logStdoutDev

    get "/:word" $ do
    beam <- param "word"
    html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]

    关于haskell - 关于 scotty Haskell Web 框架的简单问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531574/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com