在Meteor集合中拥有一致的客户端会话ID

当新客户端连接到服务器时,服务器将包含客户端Meteor.default_connection._lastSessionId的logging作为uuid字段插入名为Active的集合中。

但是,只要服务器重置,客户端将被分配一个新的Meteor.default_connection._lastSessionId而包含前一个_lastSessionId的logging仍然保留在Collection中。

问题:我们如何检测重新连接事件,并更新包含旧_lastSessionId的logging?

或者我们可以以某种方式防止_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发生更改,因为服务器需要logging现有会话才能重新连接。 在重新加载热代码的情况下,会话将被清除,以便将新的会话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")); }); 

所以这应该在客户端的热门代码上生存下来(因为Sessionvariables被保留)。 对于服务器重启热代码的情况,以前的session_id将被用来将东西插入到日志中。