是否有可能在服务器端捕获非活动用户会话? 我建立了一个带有两个intervalls的解决方案,但这使得我的页面每20秒更新一次,因为客户端每隔20秒就会推送他的在线状态。我知道Meteor.logout([callback])函数,但我必须检测客户端关闭浏览器窗口的天气而不退出。我找到了meteor client user sessions demo,但这不是我需要的功能。还有解决方案吗?
答案 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的变化,但您可以将其作为智能包安装,社区可以使其保持最新: