Вы знаете, что Meteor обеспечивает связь с сервером в режиме реального времени с помощью механизма Публикация и подписка , который обычно используется для отправки данных MongoDB и последующих модификаций.
Вы быкак аналогичная система push, но без необходимости записывать некоторые данные в вашу MongoDB.
Вполне возможно повторное использование системы Meteor Pub / Sub, но без части базы данных: при использовании Meteor.publish
вы обычно возвращаете Курсор Коллекции, следовательно, данные из вашей БД, вы также можете использовать его низкоуровневый API для отправки произвольной информации в режиме реального времени:
В качестве альтернативы, функция публикации может напрямую управлять еенабор опубликованных записей путем вызова функций added
(для добавления нового документа в опубликованный набор записей), changed
(для изменения или очистки некоторых полей в документе, уже находящемся вопубликованный набор записей) и removed
(для удаления документов из опубликованного набора записей).[…]
Просто не возвращайте ничего, используйте вышеупомянутые методы и не забывайте вызывать this.ready()
до конца вашей функции публикации.
См. Также Руководство по Пользовательские публикации
// SERVER
const customCollectionName = 'collection-name';
let sender; // <== we will keep a reference to the publisher
Meteor.publish('custom-publication', function() {
sender = this;
this.ready();
this.onStop(() => {
// Called when a Client stops its Subscription
});
});
// Later on…
// ==> Send a "new document" as a new signal message
sender.added(customCollectionName, 'someId', {
// "new document"
field: 'values2'
});
// CLIENT
const signalsCollectionName = 'collection-name'; // Must match what is used in Server
const Signals = new Mongo.Collection(signalsCollectionName);
Meteor.subscribe('custom-publication'); // As usual, must match what is used in Server
// Then use the Collection low-level API
// to listen to changes and act accordingly
// https://docs.meteor.com/api/collections.html#Mongo-Cursor-observe
const allSignalsCursor = Signals.find();
allSignalsCursor.observe({
added: (newDocument) => {
// Do your stuff with the received document.
}
});
Тогда как и когда вы используете sender.added()
полностью зависит от вас.
Примечание: имейте в виду, что он будет отправлять данные индивидуальноКлиент (у каждого Клиента есть свой собственный сеанс Сервера)
Если вы хотите передавать сообщений одновременно нескольким Клиентам, тогда самый простой способ - использовать MongoDB в качестве связующего звена между сеансами Сервера.,Если вас не волнует фактическое сохранение, просто снова и снова используйте один и тот же документ и слушайте изменения вместо дополнений в обозревателе Client Collection Cursor.