2015-09-16 3 views
0

Поскольку измененные данные (вставленные приложением A) должны отображаться в приложении B в реальном времени, мы решили пойти с .find().observe(...).Метеоритный наблюдатель с двумя различными приложениями

Это выглядит следующим образом:

App A -> Insert -> mongodb <- observe -> publish -> Display App B 

Это прекрасно работает, но он имеет задержку около 3-5 секунд между Вставка в A и отображение в B. Как я могу изменить это?

Первоначально я думал, Oplog-Observe-Driver по умолчанию в Meteor> Version 1 и реагирует в реальном времени. Он все еще ОПРОС или есть какая-то другая причина задержки?

Спасибо за ваши расходы.

ответ

1

Если вы используете Oplog, изменения будут немедленными. Если вы используете опрос, это займет несколько секунд, как вы писали. Чтобы выполнить эту работу, вам необходимо установить MONGO_OPLOG_URL. (И, конечно, ваш MongoDB должен быть включен Oplog.)

Кроме того, вам не нужно использовать find().observe(), если вы находитесь в реактивном контексте, достаточно find(). На сервере, хотя вам может понадобиться find().observe() в зависимости от того, что вы делаете.

+0

Это звучит как решение. Как установить OPLOG_URL и включить Oplog? – elCapitano

+0

это решение. посмотрите на это: https://meteorhacks.com/mongodb-oplog-and-meteor: 'MONGO_OPLOG_URL = mongodb: // user: pass @ host1: port, host2: port, host3: port/local' –

+1

или возможно это: https://gentlenode.com/journal/meteor-10-set-up-oplog-tailing-on-ubuntu/17 –

0

Вы использовали DDP.connect? Вы также должны использовать onReconnect

Remote = DDP.connect('http://yourremoteserver'); 
MyCollection = new Mongo.Collection('same_name', Remote); 

// do whatever you need with collection 

let watchCollection = function (query={}, project={}) { 
    return MyCollection.find(query, project).observe({ 
    changed: function() { console.log('Something changed!') } 
    }); 
} 
DDP.onReconnect(watchCollection); 
Смежные вопросы