2

是否有可能在服务器端捕获非活动用户会话?我构建了一个具有两个间隔的解决方案,但这使我的页面每 20 秒更新一次,因为客户端每 20 秒推送他的在线状态。我知道 Meteor.logout([callback]) 功能,但我也必须检测客户端关闭浏览器窗口而不注销的天气。我找到了流星客户端用户会话演示,但这没有我需要的功能。有什么解决办法吗?

4

2 回答 2

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

于 2013-06-21T22:53:22.380 回答
2

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

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

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

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

于 2013-02-19T16:12:14.687 回答