我想了解如何控制响应何时“缓存”以及何时“重新计算”。
举个例子:
[<EntryPoint>]
let main [| port |] =
let config =
{ defaultConfig with
bindings = [ HttpBinding.mk HTTP IPAddress.Loopback (uint16 port) ]
listenTimeout = TimeSpan.FromMilliseconds 3000.
}
let appDemo:WebPart =
DateTime.Now.ToString()
|> sprintf "Server timestamp: %s"
|> Successful.OK
startWebServer config appDemo
如果我运行上面的网络服务器并点击它几次,那么每次我都会得到相同的时间戳。我认为这是有道理的;appDemo
只是一个第一次计算就不再计算的表达式,对吗?
在这种情况下,我可能想要appDemo
针对每个请求“重新计算”。我怎么做?我似乎无法在文档中找到示例。
试试这个 - 但不确定它在“惯用的温和”量表上得分有多高:
let appDemo:WebPart =
request (fun req ->
DateTime.Now.ToString()
|> sprintf "Server timestamp: %s"
|> Successful.OK)
您是对的,您看到的是相同的值,因为它是在评估 appDemo 时捕获的。然而,这是 F# 工作方式的一个属性,与 Suave 缓存它无关。
注意WebPart
type 是一个别名HttpContext -> Async<HttpContext option>
函数 - 因此本质上它会根据每个请求重新计算而不是计算一次。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)