我正在实现简单的 http 服务器,我希望我的响应取决于一些全局状态。例如,如果我第一次从同一个客户端收到请求“get_settings”,我将发送大型设置 json,而第二次我将发送“未修改”http 响应。
类似的东西
import Network.Simple.TCP
main = withSocketsDo $ do
let settings_state = 0 -- flag for settings response
serve (Host "127.0.0.1") "23980" $ \(conn_sock, remote_addr) -> do
putStrLn $ "TCP connection established from " ++ show remote_addr
(Just inp) <- recv conn_sock 1024
send conn_sock (process inp settings_state)
process :: B.ByteString -> Int -> B.ByteString
process inp flag
| flag == 0 = ... -- return full response and change global flag
| otherwise = ... -- return 'Not-modified'
问题是我该如何实现它?我想尽可能简单地手动完成,没有任何 Monad Transformers 等等。让代码丑陋,但简单。谢谢