当我运行Meteor.disconnect()和Meteor.reconnect()时,Meteor会清除minimongo,我如何防止这种情况?

当我运行Meteor.disconnect()和Meteor.reconnect()时,Meteor会清除minimongo,我如何防止这种情况?,meteor,meteor-publications,Meteor,Meteor Publications,我们在应用程序中使用快速渲染,因此应用程序需要的所有数据都会随应用程序本身一起发送。我们没有使用任何Meteor.subscribe调用,因为minimongo由fast render填充 渲染后,我们运行Meteor.disconnect() 在将来的某个时候,我们希望重新连接以调用特定的方法,但是当我们重新连接时,minimongo被清除 如何防止Meteor在重新连接时清除minimongo中的所有文档?我怀疑是快速渲染导致了您的问题。正在检查meteor文档中的meteor.discon

我们在应用程序中使用快速渲染,因此应用程序需要的所有数据都会随应用程序本身一起发送。我们没有使用任何Meteor.subscribe调用,因为minimongo由fast render填充

渲染后,我们运行Meteor.disconnect()

在将来的某个时候,我们希望重新连接以调用特定的方法,但是当我们重新连接时,minimongo被清除


如何防止Meteor在重新连接时清除minimongo中的所有文档?

我怀疑是快速渲染导致了您的问题。正在检查meteor文档中的meteor.disconnect()

调用此方法以断开与服务器的连接并停止所有实时数据更新。当客户端断开连接时,它将不会收到对集合的更新,方法调用将排队,直到重新建立连接,并且热代码推送将被禁用

调用Meteor.reconnect重新建立连接并恢复数据传输

当不需要实时更新时,这可用于节省移动设备上的电池

这意味着您的客户端数据永远不会被删除,否则您无法在重新连接时“恢复数据传输”。这也意味着,该方法的一个主要预期用例(例如,“在不需要实时更新时用于在移动设备上节省电池”)实际上无法工作

为了绝对确定,我检查了,以查看断开连接时会发生什么,它所做的一切都是将连接状态变量设置为false,清除,并取消任何挂起的meteor方法调用

类似地,
Meteor.reconnect()
只需将连接状态变量设置回true,重新建立连接和计时器,重新建立任何订阅(以便可以获取新数据…此操作不会删除客户端数据),并调用任何排队的Meteor方法调用

在阅读了更多的相关内容后,我了解到,为了让它真正发挥作用,进行了大量的黑客攻击。我突然想到的主要黑客是“假准备”黑客,它欺骗客户机在实际订阅准备好之前就认为订阅已经准备好了(因为数据是在初始页面加载时发送给客户机的)

由于您的应用程序中没有订阅,而且
Meteor.reconnect()
不会导致页面重新加载,我想知道客户端是否从未做过任何事情,因为它从未收到另一条
就绪
消息。或者,由于Meteor不知道任何订阅(因为fast render绕过Meteor传输数据),is会清除客户端minimongo缓存,以便在启动新订阅时处于良好状态。或者,快速渲染可能还有其他方面的障碍

长话短说,我非常确定
Meteor.disconnect()
Meteor.reconnet()
对您的客户端minimongo数据没有影响,这是基于查看文档、源代码以及我离线测试Meteor应用程序的经验

我可以
Meteor.reconnect()
不删除数据,因为我生产的Meteor应用程序在检测到连接丢失(例如计算机脱机、网络中断等)时会继续调用
Meteor.reconnect()


希望这个冗长的答案能帮助你追踪你的应用程序发生了什么。

我尝试了
Meteor.disconnect()
Meteor.relconnect()
,但Minimongo DB没有被清除。我通过以下方式确认:

a) Minimongo浏览器:

b) 如果在重新连接过程中的某个时刻,帮助器将返回消息
我的收藏将没有任何记录

虽然您是对的,但订阅中的所有数据都是在重新连接后从服务器发送到客户端的(不过让本地数据库执行同步操作)。这是因为Meteor服务器像一个全新的连接一样重新连接。似乎在未来(不确定)Meteor将部署一个真正的重联,正如他们的文档中所述:

当前当客户端重新连接到服务器时(例如 暂时失去互联网连接),它将获得一个新的 每次连接。将再次调用onConnection回调, 新连接将有一个新的连接id

将来,当客户端重新连接完全实现时, 从客户端重新连接将重新连接到上的同一连接 服务器:不会为此调用onConnection回调 再次连接,该连接仍将具有相同的 连接id

资料来源:


谢谢你的回复!但问题是。。。还有一些尝试。。。我有另一个meteor应用程序,它没有使用快速渲染,客户端订阅的出版物与普通的一样。在控制台中,我执行了Meteor.disconnect()。。。。。然后是流星。重新连接()。。。。看起来什么都没变。。。但请查看您的网络选项卡。。。。单击websocket传输。。。检查一下镜框。。。所有数据都将从服务器重新下载。Meteor重新下载所有数据并重新填充minimongo。我想重新连接meteor clear minimongo,恢复和订阅并获取新数据,但由于具有快速渲染。。。未使用任何订阅,除非注册到快速渲染。。。它清除了minimongo,但由于一开始没有订阅。。。。没有新的数据被下载,让我试试并报告回来!我想流星是清除minimongo不是快速渲染,因为。。。重新连接后。。。Meteor试图恢复任何订阅。。。由于fast render最初填充了minimongo,因此没有要恢复的订阅。。。因此Meteor认为minimongo不应该有任何文档,因此它清除了minimongo…而且如果Meteor从t