当新客户端连接到服务器时,服务器会将包含客户端Meteor.default_connection._lastSessionId
作为uuid
字段的记录插入名为Active
的集合中。
但是,每当服务器重置时,都会为客户端分配一个新的Meteor.default_connection._lastSessionId
,而包含以前的_lastSessionId
的记录仍保留在集合中。
问题:我们如何检测到重新连接事件,并用新记录更新包含旧_lastSessionId
的记录?
还是可以以某种方式阻止_lastSessionId
更改?
客户端/ main.js
Meteor.startup(function() {
Meteor.call('active', Meteor.default_connection._lastSessionId)
})
服务器/ main.js
Meteor.methods({
'active': function(uuid) {
Active.insert({'uuid': uuid})
}
})
最佳答案
您无法阻止lastSessionId更改,因为服务器需要具有现有会话的记录才能重新连接到该会话。在热代码重新加载的情况下,会话将被清除,因此它将为客户端分配新的会话ID。
您可以做的是将新会话存储为全新会话,或者在连接后立即保留第一个会话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将用于在日志中插入内容。