我正在尝试为Yesod中的网站构建聊天功能,并且我希望它具有所有已连接用户的列表。我想最好的方法是将用户添加到连接上的用户列表中,并在离开时将其删除。看来,如果它保持连接打开的响应应该阻止,所以我写了天真使用eventsource时检测客户端断开连接
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来测试这个概念。
如果您曾经找到解决方案,您是否介意发布它? – Fyrn 2018-01-08 05:15:42