on master help sign in
settingsResourceTPerRequest (#116)
commitb335538e6ce423994ba012acfec15dfd26f334d6 authorMichael Snoyman <michael@snoyman.com> dateWed 3 Oct 2012, 13:00 (14 years ago) parentad3479e
3 files changed+11−1
warp/Network/Wai/Handler/Warp.hs+1 warp/Network/Wai/Handler/Warp/Run.hs+4−1 warp/Network/Wai/Handler/Warp/Settings.hs+6
warp/Network/Wai/Handler/Warp.hs+1
@@ -32,6 +32,7 @@ module Network.Wai.Handler.Warp (
3232 , settingsIntercept
3333 , settingsManager
3434 , settingsFdCacheDuration
35+ , settingsResourceTPerRequest
3536 -- ** Data types
3637 , HostPreference (..)
3738 -- * Connection
warp/Network/Wai/Handler/Warp/Run.hs+4−1
@@ -166,6 +166,9 @@ serveConnection :: Settings
166166serveConnection settings cleaner port app conn remoteHost' =
167167 runResourceT serveConnection'
168168 where
169+ innerRunResourceT
170+ | settingsResourceTPerRequest settings = lift . runResourceT
171+ | otherwise = id
169172 th = threadHandle cleaner
170173
171174 serveConnection' :: ResourceT IO ()
@@ -177,7 +180,7 @@ serveConnection settings cleaner port app conn remoteHost' =
177180 Nothing -> do
178181 -- Let the application run for as long as it wants
179182 liftIO $ T.pause th
180− keepAlive <- lift $ runResourceT $ do
183+ keepAlive <- innerRunResourceT $ do
181184 res <- app env
182185
183186 liftIO $ T.resume th
warp/Network/Wai/Handler/Warp/Settings.hs+6
@@ -26,6 +26,11 @@ data Settings = Settings
2626 , settingsIntercept :: Request -> Maybe (Source (ResourceT IO) S.ByteString -> Connection -> ResourceT IO ())
2727 , settingsManager :: Maybe Manager -- ^ Use an existing timeout manager instead of spawning a new one. If used, 'settingsTimeout' is ignored. Default is 'Nothing'
2828 , settingsFdCacheDuration :: Int -- ^ Cache duratoin time of file descriptors in seconds. Default value: 10
29+ , settingsResourceTPerRequest :: Bool
30+ -- ^ If @True@, each request\/response pair will run in a separate
31+ -- @ResourceT@. This provides more intuitive behavior for dynamic code,
32+ -- but can hinder performance in high-throughput cases. File servers can
33+ -- safely set to @False@ for increased performance. Default is @True@.
2934 }
3035
3136-- | The default settings for the Warp server. See the individual settings for
@@ -46,6 +51,7 @@ defaultSettings = Settings
4651 , settingsIntercept = const Nothing
4752 , settingsManager = Nothing
4853 , settingsFdCacheDuration = 10
54+ , settingsResourceTPerRequest = True
4955 }
5056 where
5157 go :: InvalidRequest -> IO ()