PouchDB продолжает опрос в автономном режиме

Я работаю над веб-приложением, используя PouchDB в качестве локальной базы данных и CouchDB в качестве центральной базы данных. Одна из причин, по которой я использую PouchDB, заключается в том, что я хочу использовать автономную поддержку в своем приложении. Однако я столкнулся с небольшой проблемой. При переходе в автономный режим и повторном подключении к сети PouchDB больше не синхронизируется. Мне нужно обновить браузеры, чтобы снова начать синхронизацию. Одним из решений может быть то, что даже если приложение находится в автономном режиме, PouchDB будет продолжать опрашивать удаленную базу данных, даже если оно находится в автономном режиме, что приведет к тому, что, когда оно снова будет подключено к сети, синхронизация снова включится. Другим решением было бы позволить пользователю вручную сообщить приложению, что оно снова в сети, и оттуда выбрать синхронизацию.

Как я могу сказать PouchDB снова начать синхронизацию? Если я смогу это сделать, я смогу решить свою проблему.


person Anton Gildebrand    schedule 23.03.2014    source источник


Ответы (4)


Цель PouchDB — отразить CouchDB с паритетом функций, одна из особенностей репликации CouchDB заключается в том, что через некоторое время она будет отключена, поэтому вам потребуется снова начать репликацию, как вы заметили.

Существует открытая проблема (https://github.com/pouchdb/pouchdb/issues/966) о бесконечной репликации, так что это не будет проблемой, но до тех пор вы можете использовать тот же вызов репликации, который вы использовали для запуска репликации в первую очередь:

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

http://pouchdb.com/api.html#replication

Один из вариантов — попробовать что-то вроде http://github.hubspot.com/offline/docs/welcome/ но, надеюсь, мы сможем добавить эту функцию в PouchDB.

person NickColley    schedule 18.04.2014


Мой трюк заключается в перезапуске репликации всякий раз, когда возникает ошибка:

var retryMs = 2000;
function replicateFrom() {
  var opts = {live: true};
  db.replicate.from(remoteCouch, opts).on('error', function() {
    console.log('replication error');
    setTimeout(replicateFrom, retryMs);
  });
}

То же самое можно сделать с db.replicate.to

person redgeoff    schedule 22.07.2014

Я только что выпустил pouchdb-persist, плагин для постоянной репликации. С помощью этого плагина вы можете просто сделать

var db = new PouchDB('todos');

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

Вы также можете прослушивать события connect и disconnect.

person redgeoff    schedule 10.10.2014