Javascript 具有一致的客户端';流星收藏中的会话ID

Javascript 具有一致的客户端';流星收藏中的会话ID,javascript,node.js,meteor,Javascript,Node.js,Meteor,当新客户端连接到服务器时,服务器会将包含客户端的Meteor.default\u连接的记录作为uuid字段插入名为Active的集合中 但是,每当服务器重置时,客户端都会被分配一个新的Meteor.default\u连接。\u lastSessionId,而包含以前的\u lastSessionId的记录仍保留在集合中 问题:我们如何检测重新连接事件,并用新的记录更新包含旧的\u lastSessionId的记录 或者我们能以某种方式阻止\u lastSessionId的更改吗 client/m

当新客户端连接到服务器时,服务器会将包含客户端的
Meteor.default\u连接的记录作为
uuid
字段插入名为
Active
的集合中

但是,每当服务器重置时,客户端都会被分配一个新的
Meteor.default\u连接。\u lastSessionId
,而包含以前的
\u lastSessionId
的记录仍保留在集合中

问题:我们如何检测重新连接事件,并用新的记录更新包含旧的
\u lastSessionId
的记录

或者我们能以某种方式阻止
\u lastSessionId
的更改吗

client/main.js

Meteor.startup(function() {
    Meteor.call('active', Meteor.default_connection._lastSessionId)
})
Meteor.methods({
    'active': function(uuid) {
        Active.insert({'uuid': uuid})
    }
})
server/main.js

Meteor.startup(function() {
    Meteor.call('active', Meteor.default_connection._lastSessionId)
})
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
变量被保留)。对于服务器重新启动热代码的情况,将使用上一个会话id将内容插入日志。

您的意思是服务器重置时(您执行热代码推送)还是客户端和服务器之间存在连接问题?@Akshat在热代码推送和强制重置期间(停止meteor服务器,然后重新启动). 在某些情况下,Meteor将
\u lastSessionId
插入为
null
,但我似乎无法按需复制它