当新客户端连接到服务器时,服务器会将包含客户端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将用于在日志中插入内容。

09-19 08:40