Yesod で Web サイトのチャット機能を構築しようとしています。そこに接続しているすべてのユーザーのリストが必要です。そのための最善の方法は、その人を接続のユーザー リストに追加し、離れたら削除することだと思います。コネクションを開いたままにしておくとレスポンスがブロックされるはずなので、素朴に書いてみました
getReceiveR :: Handler ()
getReceiveR = do
App chan <- getYesod
req <- waiRequest
res <- lift $ eventSourceAppChan chan req
sendWaiResponse res
liftIO $ putStrLn "client disconnected" <-- Note this
しかし、sendWaiResponse が短絡しているため、もちろん機能しませんでした。
クライアントがいつ切断されたかを検出する方法はありますか?
編集:このチュートリアルの非常にわずかに変更されたバージョンを使用して、概念をテストしています。