考虑最简单的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正在运行.每当用户触发获取“/:word”$do行时,是否会在同一个应用程序内创建一个新线程?有多少这样的线程可以存在?千?万?
>运行后./app显示消息设置phasers stun …(端口3000)(ctrl-c退出).但它没有显示出来.它不输出传入的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," me up!</h1>"]