当一个新的客户端连接到服务器时,服务器将包含客户端的 Meteor.default_connection._lastSessionId
的记录作为 uuid
字段插入到名为 的集合中事件
。
然而,每当服务器重置时,客户端都会分配一个新的 Meteor.default_connection._lastSessionId
,而包含先前 _lastSessionId
的记录仍保留在集合中。
问题:我们如何检测重连事件,并用新记录更新包含旧 _lastSessionId
的记录?
或者我们能否以某种方式阻止 _lastSessionId
发生变化?
client/main.js
Meteor.startup(function() {
Meteor.call('active', Meteor.default_connection._lastSessionId)
})
server/main.js
Meteor.methods({
'active': function(uuid) {
Active.insert({'uuid': uuid})
}
})
最佳答案
您无法阻止 lastSessionId 更改,因为服务器需要有现有 session 的记录才能重新连接到它。在热代码重新加载的情况下, session 将被清除,因此它将为客户端分配一个新的 session ID。
您可以做的是将新 session 存储为一个全新的 session ,或者在连接后立即保留第一个 session ID:
Meteor.startup(function() {
Meteor.onConnection(function() {
if(Session.equals("session_id", null)) Session.set("session_id", Meteor.default_connection._lastSessionId);
});
Meteor.call('active', Session.get("session_id"));
});
所以这应该在客户端上的热代码推送中幸存下来,(因为 Session
变量被保留)。对于服务器有热代码重启的情况,先前的 session_id 将用于将内容插入到您的日志中。
关于javascript - 在 Meteor 集合中具有一致的客户端 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21201883/