考虑最简单的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)
。但它只显示了一点。它不输出传入的Web请求。我该怎么做呢?这对于日志记录很有用。 最佳答案
假设您正在使用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>"]