我正在尝试为Yesod中的网站构建聊天功能,我希望它包含所有已连接用户的列表。我想最好的方法是将人员添加到连接上的用户列表中,并在他们离开时将其删除。似乎响应应该阻止它是否保持连接打开,所以我天真地写了
getReceiveR :: Handler ()
getReceiveR = do
App chan <- getYesod
req <- waiRequest
res <- lift $ eventSourceAppChan chan req
sendWaiResponse res
liftIO $ putStrLn "client disconnected" <-- Note this
但它当然没有用,因为sendWaiResponse短路。
有没有办法检测客户端何时断开连接?
编辑:我正在使用一个非常轻微修改的this tutorial版本来测试这个概念。
答案 0 :(得分:1)
我无法真正运行代码,但这会有效吗?
import Control.Monad.Trans.Resource
getReceiveR :: Handler ()
getReceiveR = do
App chan <- getYesod
req <- waiRequest
res <- lift $ eventSourceAppChan chan req
register . liftIO $ putStrLn "client disconnected"
sendWaiResponse res