Подтвердить что ты не робот

Используя node ddp-client для вставки в коллекцию метеор из Node

Я пытаюсь передать некоторые данные syslog в коллекции Meteor через node.js. Он работает нормально, но цикл опроса клиентов Meteor ~ 10 секунд слишком длинный для моего вкуса - я бы хотел, чтобы он был на 1 секунду.

Вкладки коллекции клиентской стороны через консоль бывают быстрыми, и все клиенты мгновенно обновляются, используя DDP. Но прямая вставка MongoDB с серверной стороны подчиняется циклу опроса клиентов (клиентов).

Итак, похоже, что на данный момент я отключаюсь от использования DDP для вставки обновлений из моего демона node.

В примере пакета ddp-client я могу видеть сообщения, на которые я подписался, но я не вижу, как отправлять сообщения new в коллекцию Meteor через DDP и node.js, тем самым обновляя сразу всех клиентов...

Любые примеры или рекомендации? Я был бы очень благодарен за это - как новичок в node и Метеор, я быстро нахожу свои пределы.

4b9b3361

Ответ 1

В соответствии с этим скринкастом можно просто назвать метеорные методы, объявленные коллекцией. В вашем случае код будет выглядеть так:

ddpclient.call('/counts/insert', [{hits: 1111}], function(err, result) {
    console.log('called function, result: ' + result);
})

Ответ 2

Хорошо, я начал работать после того, как внимательно посмотрел на какой-то код и понял, что полностью передумал. Протокол на самом деле довольно прямой, RPC ish.

Я рад сообщить, что он полностью работал на задержке вставки на стороне сервера (ручные вставки Mongo занимали несколько секунд для опроса/обновления клиентов).

Если вы проходите через DDP, вы получаете всю доброту в реальном времени (иш), которую вы узнали и полюбили Метеор:)

Для потомков и, надеюсь, поможет привлечь некоторых других людей к интересным примерам использования, вот настройка.

Использовать случай

Я загружаю некоторые пользовательские данные syslog в демона node.js. Затем этот демон разбирает и вставляет данные в Mongo. Идея заключалась в том, чтобы придумать проект, основанный на реальном времени, для моего первого эксперимента Meteor.

Все это работало хорошо, но поскольку я вставлял в Mongo снаружи самого Метеор, клиенты должны были опросить каждые ~ 10 секунд. В другом сообщении SO @TimDog предлагается. Я смотрю на DDP для этого, и его предложение, похоже, отлично работает.

Я тестировал его в своей системе, и теперь я могу мгновенно обновлять все клиенты Meteor с помощью асинхронного приложения node.js.

Настройка Основная идея здесь заключается в использовании метода "вызова" DDP. Он принимает список параметров. На стороне сервера Meteor вы экспортируете метод Meteor для их использования и вставляете свои вставки MongoDB. Это действительно просто:

Шаг 1: npm install ddp

Шаг 2. Перейдите к вашему серверному коду Meteor и сделайте что-то вроде этого внутри Meteor.methods:

Meteor.methods({

'push': function(k,v) { // k,v will be passed in from the DDP client.
    console.log("got a push request")
    var d = {};
    d[k] = parseInt(v);
    Counts.insert(d, function(err,result){ // Now, simply use your Collection object to insert.
        if(!err){ 
            return result
            }else{
            return(err)
            }
        });
     }
  });

Теперь все, что нам нужно сделать, это вызвать этот удаленный метод с нашего сервера node.js, используя клиентскую библиотеку. Вот пример вызова, который по существу является прямой копией из вызовов example.js, немного изменил привязку нашего нового метода "push", который мы только что экспортировали:

ddpclient.call('push', ['hits', '1111'], function(err, result) {
console.log('called function, result: ' + result);
})

Запуск этого кода вставляет через сервер Meteor, который, в свою очередь, мгновенно обновляет клиенты, которые подключены к нам:)

Я уверен, что мой код выше не идеален, поэтому, пожалуйста, звоните с предложениями. Я новичок в этой экосистеме, поэтому здесь есть много возможностей узнать. Но я надеюсь, что это поможет некоторым людям немного времени. Теперь, обращая внимание на то, чтобы мои шаблоны сияли со всеми этими данными в реальном времени:)