我正在尝试使用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(客户端)或任何东西,但如果它能解决我的问题,我会对它开放。
答案 0 :(得分:2)
基于chat.rb示例,我会创建一个小协议来交换数据,而不仅仅是干净的聊天消息。
使用这种方法,您可以为每个连接发送“活动信号”并清除所有没有响应的信号。
我稍微调整了一下chat.rb来说明这个想法:https://gist.github.com/tlewin/5708745