Suave - 控制何时“缓存”或重新计算响应

时间:2016-10-08 10:02:24

标签: f# suave

我想了解如何控制何时“缓存”响应与何时“重新计算”。

举个例子:

[<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。我怎么做?我似乎无法在文档中找到一个例子。

1 个答案:

答案 0 :(得分:9)

试试这个 - 不确定它在“惯用的Suave”尺度上得分有多高:

 $Username = 'labuser'
 $Password = 'labuser'
 $pass = ConvertTo-SecureString -AsPlainText $Password -Force
 $Cred = New-Object System.Management.Automation.PSCredential -ArgumentList $Username,$pass


 Invoke-command –computername "mycompname" -credential $Cred –scriptblock {[console]::beep(500,300)}

你是正确的,因为它是在评估appDemo时捕获的,因为它看到了相同的值。这是F#如何工作的属性,并且与Suave缓存无关。

请注意,let appDemo:WebPart = request (fun req -> DateTime.Now.ToString() |> sprintf "Server timestamp: %s" |> Successful.OK) 类型是WebPart函数的别名 - 因此它本身就会在每个请求上重新计算而不是计算一次。