2016-10-08 61 views
5

我想了解如何控制何時響應被「緩存」與何時「重新計算」。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。我怎麼做?我似乎無法在文檔中找到示例。

回答

9

試試這個 - 不知道如何高分上,雖然「慣用倜儻」的規模:

let appDemo:WebPart = 
    request (fun req -> 
     DateTime.Now.ToString() 
     |> sprintf "Server timestamp: %s" 
     |> Successful.OK) 

你在說的沒錯,你看到了同樣的價值,因爲它是在appDemo被評爲時間捕捉。這是F#如何工作的一個特性,並且與Suave緩存它無關。

請注意,WebPart類型是HttpContext -> Async<HttpContext option>函數的別名 - 因此本質上它會讓自己重新計算每個請求而不是一次計算。