使用eventsource时检测客户端断开连接

时间:2013-04-07 01:32:54

标签: haskell yesod server-sent-events

我正在尝试为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版本来测试这个概念。

1 个答案:

答案 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