Couchdb 数据库在脱机时保持轮询

Couchdb 数据库在脱机时保持轮询,couchdb,pouchdb,Couchdb,Pouchdb,我正在开发一个Web应用程序,使用PockDB作为本地数据库,CouchDB作为中央数据库。我使用PockDB的原因之一是我想在我的应用程序中利用离线支持。 然而,我遇到了一个小问题。脱机和再次联机时,PockDB不再同步。我必须刷新浏览器才能让它再次开始同步。一种解决方案是,即使应用程序处于脱机状态,数据库也会在脱机状态下继续轮询远程数据库,这将导致当它再次联机时,synchro会再次拾取。另一个解决方案是让用户手动告诉应用程序它再次联机,并从那里获取同步 我怎样才能告诉数据库重新开始同步?如

我正在开发一个Web应用程序,使用PockDB作为本地数据库,CouchDB作为中央数据库。我使用PockDB的原因之一是我想在我的应用程序中利用离线支持。 然而,我遇到了一个小问题。脱机和再次联机时,PockDB不再同步。我必须刷新浏览器才能让它再次开始同步。一种解决方案是,即使应用程序处于脱机状态,数据库也会在脱机状态下继续轮询远程数据库,这将导致当它再次联机时,synchro会再次拾取。另一个解决方案是让用户手动告诉应用程序它再次联机,并从那里获取同步


我怎样才能告诉数据库重新开始同步?如果我能做到这一点,我就可以解决我的问题。

PockDB的目标是使用功能奇偶校验镜像CouchDB,CouchDB复制的一个功能是,如果它离线,它将在一段时间后超时,因此这将要求您重新开始复制,如您所述

关于无限复制有一个开放的问题(),因此这不会是一个问题,但在此之前,您可以使用用于启动复制的相同复制调用:

db.replicate.to(remoteDB, [options]);


一种选择是尝试类似的方法,但希望我们能将此功能添加到PockDB中。

我的技巧是在出现错误时重新启动复制:

var retryMs = 2000;
function replicateFrom() {
  var opts = {live: true};
  db.replicate.from(remoteCouch, opts).on('error', function() {
    console.log('replication error');
    setTimeout(replicateFrom, retryMs);
  });
}
我刚刚发布了一个用于持久复制的插件。有了这个插件,你就可以

var db = new PouchDB('todos');

// Instead of db.replicate()
var persist = db.persist({ url: 'http://localhost:5984/todos' });

您还可以侦听
连接
断开
事件。

DB3.1.0实现了复制API的
重试
选项


仅供参考,这是一个实验性的未记录功能,将来可能会发生变化。
PouchDB.replicate.sync('http://remote', {
    live: true,
    retry: true
})