Что означает «непрерывный» для PouchDB replicate()?

Согласно документации PouchDB replicate() можно добавить параметр continuous к Pouch.replicate():

При значении true начинает подписываться на изменения в первой базе данных и реплицировать их во вторую.

Я понимаю, что это значит, но как это работает? Я просмотрел код, но трудно понять, как осуществляется «подписка».


person Sam Dutton    schedule 14.06.2013    source источник


Ответы (2)


Это зависит от того, что является первой базой данных.

Если это удаленная CouchDB, pouch отправляет xhr запрос к db/_changes ресурсу для этой CouchDB (http://wiki.apache.org/couchdb/HTTP_database_API#Changes). Он действительно устанавливает feed=longpoll , как упомянула Ким. Опция longpoll заставляет диван ждать, пока не будет изменений, прежде чем что-либо отправить - таким образом, вы не будете опрашивать овер только для того, чтобы обнаружить, что изменений не было.

Если первая база данных является локальной PouchDB, она прослушивает события «изменения», которые запускаются всякий раз, когда в базу данных вносятся изменения.

В любом случае, когда репликатор видит поступившее изменение, он реплицирует его во вторую базу данных.

person jches    schedule 14.06.2013

Я не читал код PouchDB, но единственный способ сделать это — прослушать канал _changes , возможно, с feed установленным на long-polling или continuous.

person Kim Stebel    schedule 14.06.2013