Я вижу, что при публикации заполняется collection._connection.publish_handlers
, а также collection._connection.method_handlers
и, возможно, другие области.
Я хочу в основном очистить память, удалив ссылки на эту коллекцию и полностью опубликовать ее.
В основном каждый пользователь приложения имеет список коллекций для этого пользователя. Существует функция публикации, которая выглядит так, чтобы пользователь мог получить список своих коллекций:
Meteor.publish('users_collections', function() {
var self = this;
var handle = UsersCollections.find({ownerId: self.userId}).observeChanges({
added: function(id, collectionInfo) {
UsersCollectionManager.addUsersCollection(self.userId, collectionInfo.name);
}
});
});
Это публикует список пользовательских списков (и любой пользователь, который подключается, получает свой список).
Как только пользователь получает свой список, каждая из этих коллекций становится реактивной с новым Meteor.Collection и затем публикуется.
UsersCollectionManager.addUsersCollection = function(userId, collectionName) {
if (self.collections[userId].collections[collectionName] === undefined) {
self.collections[userId].collections[collectionName] = new Meteor.Collection(collectionName);
Meteor.publish(collectionName, function() {
return self.collections[userId].collections[collectionName].find();
});
}
};
Как только пользователь отключится, у меня есть функция, которая запускается.
если у этого пользователя нет открытых подключений (например: если у них открыто несколько окон и все соединения закрыты "все окна закрыты" ), тогда он запускает тайм-аут 30 с:
- очистить все эти вызовы публикации и новые вызовы Meteor.Collection для сохранения памяти
Поскольку другому пользователю приложения не понадобятся эти пользовательские коллекции.
Я не уверен, как на самом деле очистить их от памяти.
В Meteor API я не вижу типа "unpublish" или "Collection.stop".
Как выполнить очистку?