Meteor应用程序如何脱机工作?

时间:2012-04-13 05:18:54

标签: offline meteor

这在以下情况下非常有用:

  • 服务器已关闭且客户端无法连接以进行实时同步
  • 没有互联网连接
  • 用户不想上网但想要使用应用程序;

4 个答案:

答案 0 :(得分:54)

是的!这在大多数情况下已在Meteor中实现。

如果与服务器的连接丢失,客户端仍然可以在本地运行。数据库写入似乎在客户端上成功并立即反映在屏幕上。重新建立连接后,Meteor会将所有待处理的方法请求重新发送到服务器,并使用服务器的结果更新客户端显示。这是延迟补偿的全部结果,离线被视为服务器只是非常慢。

客户端可以监视被动'Meteor.status()'输出以查看当前连接的状态。例如,您可以使用Meteor.status来驱动弹出窗口,其中包含重新连接计时器和“立即连接”按钮,例如gmail。

编辑:当然,流星不是魔法。如果您点击“重新加载”,或离开页面等,离线时您将丢失Meteor会话,并且在重新获得网络之前无法再次启动。但是,所有具有离线模式的网络应用都是如此,因此对于您应用的用户来说,这不应该让您感到惊讶。

答案 1 :(得分:11)

还有另外几个选项可以解决'如果你的标签关闭,或者你重新加载'问题。我还没试过,但看起来很有趣。

https://github.com/awwx/meteor-offline-data

  

Meteor离线数据

     

Meteor离线数据项目的主页,实施“离线”   收集“包装Meteor.Collection:

     

来自服务器的数据持久存储在浏览器数据库中,   即使应用程序启动,也可以将其提供给应用程序   离线。<​​/ p>      

用户所做的更改也会保存在浏览器数据库中,   如果浏览器已关闭并重新打开,则保留它们。下一次   应用程序上线,更改将发送到服务器。

     

更新在浏览器窗口之间被动地共享   应用程序,即使在离线时也是如此。

https://github.com/GroundMeteor/Meteor-GroundDB

  

特点:

     

灯光足迹

     

广泛的浏览器支持Chrome,Safari,Firefox和Internet Explorer 9   如果没有localstorage恢复,则回退到正常的Meteor.Collection   集合中的更改方法的恢复工作脱机更新交叉   窗口选项卡支持SmartCollection支持离线   仅客户端数据库使用EJSON.minify和EJSON.maxify   压缩localstorage中的数据将来在服务器端会有一个可自定义的冲突处理程序

答案 2 :(得分:0)

行的底部:

1)浏览器可以完全保存实际会话(每次多长时间?每次应用请求它都会因为有变化。对于这样的应用程序,每10秒钟就不够了,我们需要每个事件)。我们可以用Firefox编程吗? (但它需要保存所有内容(HTML,JS,MinoMongoDB等,只需进行一次更改!)

2)或者我们有一个客户端完整的流星堆栈来处理本地的东西(它自己的本地应用程序),但不知何故将其CRUD操作传递给另一个选项卡或浏览器实例中的另一个在线应用程序。 (第二个应用程序将由真正的远程服务器提供)问题是如果这两个应用程序可以通信。我认为出于安全原因,浏览器会禁止它。

另一个更有创意的想法可能是:在客户端堆栈上激活oplog。然后,每次返回在线并且不断在线时,实际客户端的oplog可以在主应用程序中导出/导入(这是另一个oplog日志),

3)除非我们可以从客户端的meteor full stack发送call()请求到服务器上的另一个流星堆栈。 (有可能吗?是否有关于流星中URL域限制的规则)

但它并没有解决在平板电脑上拥有完整流星堆栈的可能性(我不知道这样的事情是可能的)

答案 3 :(得分:-1)

我不是专家,但让我们想象一个解决方案:

不在平板电脑/手机上(不确定我们是否可以在这样的设备上安装流星堆),但在桌面上,用户需要离线可用性,例如销售点,某些交易记录,有限或无法达到 - 产品清单,定价和库存等 (使用非物理本地库存的交易应该«待确认(离线订单)» (具有该股票的地点即使已经由离线订单保留也可以出售,他们不知道,因为他们或其他用户处于离线状态,特别是如果拥有该股票的用户是离线订单的那个人)

除此之外,某些功能只能在联机时使用(使用其他Meteor网络应用程序)

当然,并非所有应用程序的部分都可以脱机使用:敏感的记录创建,一些事务,需要完整收集的搜索等。离线功能可以通过本地机器网络服务器使用当地全堆叠的Meteor已安装。

Oplog会将这些脱机数据库同步到集中式服务器上的镜像集合, 每个用户一个特定的数据库,因此并非所有大数据都可以在用户的​​计算机上脱机使用。 我们的想法是保持某些功能的可用性。 否则,我们可能只有一个DB用于所有用户的离线事务,但oplog会在所有用户的脱机DB上同步所有这些事务。我们可以尽快发布并清除这些记录,但不利于隐私。最好的是客户端的脱机数据库 - 并且在集中式服务器上镜像 - 将仅包括该用户创建的记录或用户可能需要的信息,因此每个用户只有一个特定的数据库。

中央服务器端功能会定期验证并将这些记录发布给包含集中式数据库的更大的所有用户。

一种简单的方法:使用本地离线流星应用程序完成的所有事务,在可用时将事务发布到Web服务。 (这样,用户无需使用2个应用程序来回管理。)

我们可以使用2个发票号码的概念: 销售发票号码:在交易时生成(文件ID?)

顺序发票号码:用于会计目的,稍后生成(在线时和15至20秒的文件。旧的。我们肯定知道在此期间创建的所有新发票)

这里的想法是让当地的流星堆栈成为当地持久性的汽车, Oplog与集中持久性同步(除非我们发送asynchrone webservice调用在线时发布的事务,但我们使用更大的数据库丢失自动sinc)

(毕竟,也许最好有两个应用程序在运行:在本地,一个中心服务和让这两个人在一起交谈的方式,或一个在线和离线应用程序,以一种舒适的方式指导用户使用在线优先级,离线时离线)

如果知识渊博的人群评估并记录工作方式,那将会很好。我还没有使用Meteor,仍在基础学习过程中。

谢谢,

马克