/を使用してその状態をState
モナドに格納するWebサーバーを作成したいと思います。このようなもの:wai
warp
{-# LANGUAGE OverloadedStrings #-}
import Network.Wai
import Network.Wai.Handler.Warp
import Network.HTTP.Types
import Control.Monad.State
import Data.ByteString.Lazy.Char8
main = run 3000 app
text x = responseLBS
status200
[("Content-Type", "text/plain")]
x
app req = return $ text "Hello World"
app1 req = modify (+1) >>= return . text . pack . show
-- main1 = runStateT (run 3000 app1) 0
もちろん、コメント行は機能しません。目的は、カウンターを状態モナドに格納し、要求ごとにその増加する値を表示することです。
また、スレッドセーフを取得するにはどうすればよいですか?ワープはミドルウェアを順次または並行して実行しますか?
IORef
州で利用できるオプションは何ですか?このシナリオで使用できる以外に何かありますか?
州が安全を提供していることは理解していますが、ワイは州を許可していないようです。
必要なのは、他の場所から呼び出すことができる非常に単純なシングルスレッドRPCだけです。Haxr
パッケージには別のWebサーバーが必要ですが、これはやり過ぎです。Node.JSからのHaskellの呼び出しを参照してください-提案がなかったので、Wai/WarpとAesonを使用して単純なサーバーを作成しました。しかし、WAIは同時実装をサポートするように設計されているため、事態は複雑になっているようです。