我正在尝试为 Yesod 中的一个网站构建一个聊天功能,我希望它有一个所有已连接用户的列表。我想最好的方法是将该人添加到连接上的用户列表中,并在他们离开时将其删除。如果保持连接打开,似乎响应应该阻塞,所以我天真地写了
getReceiveR :: Handler ()
getReceiveR = do
App chan <- getYesod
req <- waiRequest
res <- lift $ eventSourceAppChan chan req
sendWaiResponse res
liftIO $ putStrLn "client disconnected" <-- Note this
但它当然不起作用,因为 sendWaiResponse 短路了。
有什么方法可以检测客户端何时断开连接?
编辑:我正在使用本教程的一个非常修改的版本来测试这个概念。