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

这在以下情况下很有用

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

是! 这在Meteor中已经实现了。

如果与服务器的连接丢失,客户端仍然可以在本地运行。 数据库写入将在客户端上显示成功并立即反映在屏幕上。 一旦连接重新build立,Meteor将重新发送所有待处理的方法请求到服务器,并使用来自服务器的结果更新客户端显示。 这是所有延迟补偿的结果,离线处理就像服务器很慢。

客户端可以监视被动的“Meteor.status()”输出以查看当前连接的状态。 例如,你可以使用Meteor.status来驱动一个带有重新连接定时器的popup窗口和一个“立即连接”button,比如gmail。

编辑:当然,meteor不是魔法。 如果你点击“重新加载”,或离开页面等离线,你将失去你的meteor会议,不能再次启动,直到你重新获得networking。 但是,所有使用离线模式的networking应用程序都是如此,所以它不应该让您的应用程序的用户感到惊讶。

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

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

meteor离线数据

meteor离线数据项目的主页,实现一个包含Meteor.Collection的“离线收集”:

来自服务器的数据永久存储在浏览器数据库中,即使应用程序启动离线,也可以使其对应用程序可用。

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

在同一个应用程序上打开的浏览器窗口中,即使在离线状态下,更新也被动地共享

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

特征:

轻脚印

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

底线:

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

2)或者我们有一个客户端完整的meteor堆照顾本地的东西(本身的一个本地应用程序),但不知何故在另一个选项卡或浏览器的实例中将其CRUD操作传达给另一个在线应用程序。 (第二个应用程序将由真正的远程服务器服务)问题是,如果这样的2个应用程序可以沟通。 我想浏览器会因为安全原因而禁止它)

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

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

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

我不是一个专家,但让我们设想一个解决scheme:

不是在平板电脑/单元(不知道我们可以在这样的设备上安装meteor堆),但在桌面上,用户需要一个离线的可用性,如销售点,一些交易logging,一个有限或不是最新的产品清单,定价和库存等等(使用不是本地的库存的交易应该是“确认的(离线订单)”(即使已经由离线订单保留的库存,具有该库存的地点也可以销售,他们不知道的,因为他们或其他用户离线,特别是如果有股票的用户是离线的)

除此之外,一些function只能在线上使用(使用另一个Meteornetworking应用程序)

当然,并不是所有应用程序的部分都可以离线使用:敏感的logging创build,一些事务,需要完整收集的search等等。离线function可以通过本地机器networking服务器工作,并且已经安装了本地完全堆积的Meteor。

Oplog会将这些离线数据库同步到中央服务器上的一个镜像集合,每个用户有一个特定的数据库,因此并不是用户计算机上可以脱机使用的所有大数据。 这个想法是保持一些function的可用性。 否则,我们可能只有一个数据库用于所有用户的离线交易,但是oplog会在所有用户的离线数据库上同步所有这些交易。 我们可以尽快发布和清除这些logging,但不是很好的隐私。 最好的是,客户端的离线数据库 – 在中央服务器上镜像一个 – 只包含由该用户创build的logging或用户可能需要的信息,因此每个用户需要一个特定的数据库。

一个中央服务器端函数将定期validation并将这些logging发布到更大的所有包含用户的集中式数据库。

一个简单的方法:与本地离线meteor应用程序完成的所有交易,将事务处理后发布到web服务。 (这样,用户不必pipe理使用2个应用程序,来回)。

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

顺序发票号码:为了会计目的,稍后产生(当在线和15-20秒的文件时,我们确实知道在那个时期创build的所有新发票)

这里的想法是有一个当地的meteor堆,采取本地持续的车,Oplog同步集中持久性(除非我们发送asynchronousweb服务调用交易张贴时,在线,但我们松动自动sinc与较大的数据库)

(毕竟,也许最好有两个应用程序运行:在本地,一个中央服务器和一个让这两个人聊天的方式,或者一个在线和离线的应用程序,以一个舒适的方式来指导用户使用在线优先和离线的离线)

如果有更多知识渊博的人群评估和logging工作方式,那将是一件好事。 我还没有使用meteor,仍然在基本的学习过程。

谢谢,

渣子