Je me demande s'il existe un moyen de mettre en œuvre une tâche en arrière-plan, peut-être avec un pool de travailleurs. Pouvez-vous me montrer la direction, je pense à écrire un package pour cela?
Avant de penser à écrire un package pour quoi que ce soit, regardez d'abord s'il existe des packages qui font ce dont vous avez besoin. Dans le monde Meteor, cela signifie rechercher dans Atmosphère des packages "gestion des tâches/files d'attente/tâches/travailleurs/planification", puis sur npm pour les mêmes termes de recherche. Vous devez également définir plus précisément vos besoins:
Paquets abandonnés:
Meteor est capable d'utiliser des packages npm directement depuis plusieurs années maintenant, donc cette question revient à trouver packages de gestion de travail/travailleur/file d'attente sur NPM. Si vous ne vous souciez pas de la persistance:
map
, reduce
, filter
, each
. ..) ainsi que certains modèles courants de flux de contrôle asynchrone (parallel
, series
, waterfall
...) "Si vous voulez de la persistance, étant donné que Meteor utilise déjà MongoDB, il peut être avantageux d'utiliser un package de planification de travaux avec persistance pour MongoDb. Le plus puissant et le plus populaire semble être Agenda , mais malheureusement il n'a pas été maintenu depuis des mois, et il a un arriéré important de problèmes .
Si vous êtes prêt à ajouter une dépendance soutenue par redis à votre projet, il y a plus de choix:
Comme MongoDB, Redis peut également fournir une haute disponibilité (via Redis Sentinel), et si vous souhaitez répartir les tâches entre plusieurs machines de travail, vous pouvez les pointer toutes sur le même serveur Redis .
Si vous recherchez quelque chose de spécifique à Meteor, je suis heureux de partager qu'il existe un nouveau package appelé Steve Jobs. Cela rend l'exécution des tâches en arrière-plan aussi simple que d'appeler une méthode.
Il possède toutes les fonctionnalités standard que vous attendez, telles que l'exécution d'une tâche une seule fois, la nouvelle tentative de tâches ayant échoué, etc. Vous pouvez en savoir plus sur GitHub:
Il existe un package basé sur les tâches Cron qui peut être utilisé pour planifier des tâches à certains intervalles ou à certaines dates. Voici le package: https://atmosphere.meteor.com/package/cron
Et si vous cherchez la source de ce paquet, vous remarquerez qu'ils utilisent simplement:
Meteor.setInterval( ... , delay );
Donc, si vous enregistrez vos tâches dans une base de données, puis les chargez à intervalles au démarrage, vous serez probablement sur la bonne voie.
Je suppose que le support approprié est sur leur feuille de route, mais en attendant, j'ai réussi à le faire fonctionner de manière hacky via setInterval
. Voir le package cron-tick .