检测用户何时离开事件流



我正在尝试使用Sinatra从头开始创建一个聊天室。我需要检测用户何时离开页面。起初,我正在考虑使用Javascript onbeforeunload函数,但随后用户实际上可以假装离开或离开而不通知服务器。

我的流部分代码看起来像这样:

get '/stream', :provides => 'text/event-stream' do
  stream :keep_open do |out|
    connections << out
  end
end

根据Sinatra的一个示例文件,chat.rb,它基本上创建了一个聊天室,他们使用

out.callback do
   connections.delete(out)
end

但在我的测试中,当我关闭页面作为测试时,它没有触发(在我的示例中,如果代码被触发,我将其puts某事发送到控制台,并且没有任何内容输出到控制台)。

是否有更可靠的方法来检测用户是否离开流?

另外,我没有使用socket。io(客户端)或任何东西,但如果它能解决我的问题,我是开放的。

基于聊天。例如,我会创建一个小协议来交换数据,而不仅仅是干净的聊天消息。

使用这种方法,您可以为每个连接发送一个"活动信号",并清除所有不响应的连接。

我稍微调整了一下聊天内容。Rb来说明这个想法:https://gist.github.com/tlewin/5708745

最新更新