gpt4 book ai didi

javascript - 我如何区分 Meteor 中的连接关闭和刷新?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:30:14 24 4
gpt4 key购买 nike

我正在尝试确定用户何时关闭他们的连接。问题是,当我尝试使用 this._session.socket.on("close",...) 时,它也会在用户刷新时注册。

这是我的代码:

Meteor.publish("friends", function () {
var id = this._session.userId;
this._session.socket.on("close", Meteor.bindEnvironment(function()
{
// This logs when the user disconnects OR refreshes
console.log(id);
}, function(e){console.log(e)}))
return Meteor.users.find({...});
});

如何区分刷新和真正断开连接?

编辑:如果可能的话,我真的很想避免使用“保持事件”功能。

最佳答案

好吧,这有点老套,但我不确定是否有更好的解决方案。这需要 mizzao:user-status 包。我解决这个问题的方法是在“on close”函数中调用一个 meteor 方法,它开始以 5 秒的间隔轮询数据库并检查用户的状态是否在线。经过一段设定的时间(我说的是 65 秒)后,如果用户上线了,我就知道这是一次刷新。

无论如何,上面的内容有点令人困惑,所以这是代码:

//server
Meteor.publish("some_collection", function(){
var id = this._session.userId;
this._session.socket.on("close", Meteor.bindEnvironment(function(){
Meteor.call("connectionTest", id);
}, function(e){console.log(e)}));
return Meteor.users.find({..});
});

//Meteor method
Meteor.methods({
connectionTest: function(userId){
this.unblock();
var i = 0;
var stop = false;
var id = Meteor.setInterval(function(){
var online = Meteor.users.findOne(userId).status.online;
if(!online){
console.log("offline");
}
else{
stop = true;
console.log("still online");
}
i++;
if(stop || i > 12){
if(online){
//do something
}
else{
// do something else
}
Meteor.clearInterval(id);
}
}, 5000);
}
});

关于javascript - 我如何区分 Meteor 中的连接关闭和刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31844637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com