vorrei eseguire alcuni compiti normali client indipendente sullo sfondo di un'applicazione Meteor (come raschiare alcune pagine). Quindi non dovrebbero essere all'interno di alcun thread client, ma una volta che finiscono, vorrei aggiornare tutti i client con le informazioni. Qual è il modo migliore per raggiungere questo obiettivo?compiti di sfondo non connessi con qualsiasi client in Meteor
risposta
Per fare questo in modo da consentire processi esterni arbitrari aggiornano i client Meteor, usa il protocollo DDP che è associato con Meteor. I processi del tuo server possono scrivere sul canale DDP e quando aggiornano i tuoi clienti. Date un'occhiata a questo post per un esempio e un caso d'uso, che può essere simile al tuo:
Using node ddp-client to insert into a meteor collection from Node
Il protocollo è abbastanza semplice, e il post mostra un esempio di una scrittura processo node.js in una collezione Mongo che aggiorna i client in tempo reale.
loro Eseguire sul vostro codice lato server. Se con regolarità intendi attività a tempo o ogni giorno:
È possibile utilizzare un cron job con il pacchetto cron di Tom Coleman: https://github.com/tmeasday/meteor-cron.
Avrai bisogno di installare il meteorite package manager first: npm install meteorite -g
e quindi installare il pacchetto cron nel progetto dir mrt add cron-tick
Server js
var MyCron = new Cron();
// this job will happen every day (60 seconds * 60 * 24)
MyCron.addJob(60*60*24, function() {
//Scrape your stuff
//Update your collections
});
Non appena si esegue l'aggiornamento/inserimento/la modifica verrà inviata a tutti i client.
C'è un modo per spingere qualcosa per i clienti che non si basa sulla raccolta (in modo da non basate su qualcosa nel database)? Ti piace solo l'informazione che qualcosa è stato fatto? Una notifica? – Mitar
In quale thread viene eseguito questo cron job? – Mitar
Il suo un po 'Tricker di quello, javascript nel nodo in un singolo thread, quindi questo è dove le fibre viene in. Se si utilizza un Meteor.call in cron per una meteora.metodo con il tuo compito contenente 'this.unblock' il contenuto nel metodo da' this.unblock' verrebbe eseguito in una nuova fibra in modo da non bloccare altri client. Per quanto riguarda le altre cose che la meteora può inviare, ti consiglio la raccolta dei conteggi per camera: http://stackoverflow.com/questions/10565654/how-does-the-messages-count-example-in-meteor-docs-work un buon punto di partenza, dipende da cosa esattamente si vuole inviare. – Akshat
Si potrebbe provare a chiamare un Meteor.setInterval
sul server (forse in Meteor.startup
). Questo dovrebbe funzionare, anche se potrebbe non essere flessibile come la soluzione di cron.
L'idea è che posso avere processi indipendenti, anche dividerli tra più server. Quindi, davvero, un sollevamento pesante su macchine da lavoro. – Mitar
Vai a http://atmospherejs.com e cercare cron
Il migliore che ho trovato è percolate:synced-cron
installazione
meteor add percolate:synced-cron
Basics
SyncedCron.add({
name: 'Crunch some important numbers for the marketing department',
schedule: function(parser) {
// parser is a later.parse object
return parser.text('every 2 hours');
},
job: function() {
var numbersCrunched = CrushSomeNumbers();
return numbersCrunched;
}
});
SyncedCron.start();
avanzata
- 1. Impostazioni lato client Meteor
- 2. Reattività solo lato client con Meteor?
- 3. Invia comando a tutti i client connessi
- 4. Meteor NPM-module lato client?
- 5. Ottenere un elenco di client connessi per un servizio wcf
- 6. Come ottenere un elenco di client connessi su SignalR
- 7. Elenco dei nomi utente dei client connessi tramite socket io
- 8. Caricamento immagini di sfondo da file css in meteor
- 9. compiti concatenamento con ritardi
- 10. Streaming dei dati dal server al client con Meteor:
- 11. Il client non riceve i dati dal server Meteor pubblica
- 12. node.js ascolta UDP e inoltra ai client Web http connessi
- 13. Qualsiasi parser haml lato client?
- 14. Spring, come trasmettere messaggi ai client connessi tramite websocket?
- 15. Numero di componenti connessi in un grafico non orientato
- 16. Meteor Accounts.ui.config non funziona con Google
- 17. Meteor - Utilizzo della raccolta all'avvio del client
- 18. compiti sedano Flask non lavorano
- 19. Come funziona Meteor, Client vs Server?
- 20. Eclipse non mostra compiti TODO
- 21. Running 2 compiti asincroni con grugnito
- 22. Aiuto compiti in Java
- 23. Qualsiasi OSS .Net FTP (client) con TLS e SSL?
- 24. Meteor sessione non è definito
- 25. Gulp.js compiti eseguiti in ordine specifico blocco
- 26. Scrittura in Meteor con ClojureScript
- 27. Catena di compiti C++
- 28. compiti di esecuzione in parallelo in pitone
- 29. Multiple (separato/namespace) codebase del client Meteor per singola applicazione Meteor
- 30. Hadoop - aumentando mappa compiti in xml non significa aumenta mappa compiti quando gira sotto
Si prega di notare che non esiste una cosa come un "thread del client" a Meteor, contrariamente a soluzioni più tradizionali. Le richieste client vengono elaborate in modo asincrono, non multi-thread. –
Hai ragione. Sono fibre, un multi-tasking cooperativo. – Mitar