在服务器端捕获用户断开连接

时间:2013-02-19 15:52:14

标签: meteor

是否有可能在服务器端捕获非活动用户会话? 我建立了一个带有两个intervalls的解决方案,但这使得我的页面每20秒更新一次,因为客户端每隔20秒就会推送他的在线状态。我知道Meteor.logout([callback])函数,但我必须检测客户端关闭浏览器窗口的天气而不退出。我找到了meteor client user sessions demo,但这不是我需要的功能。还有解决方案吗?

2 个答案:

答案 0 :(得分:2)

查看meteor-profile-online包(您需要为其安装meteorite):

  

Profile.online是一个流星智能包,提供了一种方便的方式来揭示帐户在线状态。

它将profile.online属性添加到用户对象,该属性由您可以配置的keepalive切换。

它使用您在问题(轮询)中提到的相同方法,但这确实是唯一的方法。至少这个软件包很好地将它与Meteor和Meteor.keepalive进行了很好的整合。

答案 1 :(得分:2)

我已经想出了一种使用websocket捕获断开连接的方法。这不会使用轮询将状态保持在线状态。基本上,您可以在客户端进行任意发布并订阅它:

Meteor.publish "statusWatcher", ->
  id = @_session.userId
  @_session.socket.on "close", Meteor.bindEnvironment( ->
    Meteor.users.update id,
      $set: {'profile.online': false}

与往常一样,这取决于Meteor API的变化,但您可以将其作为智能包安装,社区可以使其保持最新:

https://github.com/mizzao/meteor-user-status