1

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

我的流部分代码如下所示:

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(客户端)或任何东西,但如果它解决了我的问题,我愿意接受。

4

1 回答 1

2

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

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

我对 chat.rb 做了一点修改来说明这个想法:https ://gist.github.com/tlewin/5708745

于 2013-06-04T19:31:17.583 回答