Verileri State
depolayan bir aptal web sunucusu yapmaya çalışıyorum. Web.Scotty
kullanıyorum. I've used ReaderT before with scotty to access config, ancak aynı yaklaşımı izleyerek burada çalışmaz. Her istekte durumu sıfırlar.WebScotty içinde StateT kullanın.Scotty
Program başladığında başlangıç durumunu ayarlamak istiyorum, daha sonra programın tüm ömrü boyunca aynı durumun sabit kalmasını istiyorum.
Bu işi nasıl yapabilirim? notunu documentation for scottyT
üçüncü argüman üzerine açıklama:
{-# LANGUAGE OverloadedStrings #-}
import Web.Scotty.Trans
import Control.Monad.State (StateT, evalStateT, lift)
import qualified Control.Monad.State as S
import Data.Text.Lazy (Text)
main :: IO()
main = do
let runner = flip evalStateT "message"
scottyT 3000 runner runner routes
routes :: ScottyT Text (StateT Text IO)()
routes = do
get "/data" $ do
val <- lift S.get
text val
put "/data/:val" $ do
val <- param "val"
lift $ S.put val
text val
Tamamen işlevsel olmayan dillerde (apache, tomcat, vb.) Yazılmış olan web sunucularında bile, genellikle paylaşılan durumu bellekte saklamıyorsunuz .... Kilitleme, kapatma durumunda durumu saklama endişesi, Veriyi kullanıcılara, vb. ile eşleme. Bu, neden veritabanlarının var olduğunun bir türüdür .... Benim tahminim Scotty'de yapmak istediğiniz şeyi yapamazsınız ve Scotty yazarları bunu uygulamak istemeyecektir (ama bu sadece tahminim). – jamshidh
Bu mantıklı. Bunu yapmak için tek nedeni node.js gelen bazı insanlar haskell öğretmek ve bir veritabanına atmadan önce kolay bir ilk adım gibi görünüyor. Guess not :) –