Chciałbym uruchomić pewne regularne zadania niezależne od klienta w tle aplikacji Meteor (jak skrobanie niektórych stron). Nie powinny one znajdować się w wątku klienta, ale gdy już się skończą, chciałbym zaktualizować wszystkich klientów informacjami. Jaki jest najlepszy sposób, aby to osiągnąć?Zadania w tle niezwiązane z żadnym klientem w Meteorzie
Odpowiedz
Aby to zrobić w sposób, który umożliwia dowolne procesy zewnętrzne aktualizować klientów Meteor, użyj protokołu DDP, który jest powiązany z Meteor. Twoje procesy serwera mogą zapisywać na kanale DDP, a gdy to zrobią, twoi klienci będą aktualizować. Rzucić okiem na to stanowisko dla przykładu i przypadków użycia, które mogą być podobne do Ciebie:
Using node ddp-client to insert into a meteor collection from Node
Protokół jest dość prosta, a post pokazuje przykład node.js piśmie procesowym do kolekcji Mongo, która aktualizuje klientów w czasie rzeczywistym.
Uruchom je po stronie serwera. Jeśli regularnie masz na myśli codzienne zadania lub coś takiego:
Możesz użyć zadania crona z pakietem crona Toma Colemana: https://github.com/tmeasday/meteor-cron.
Musisz zainstalować meteorite package manager first: npm install meteorite -g
a następnie zainstalować pakiet crona w projekcie reż 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
});
Jak najszybciej uruchomić aktualizacji/insert/edycja zostaną przekazane do wszystkich klientów.
Czy istnieje sposób na przekazanie czegoś do klientów, który nie jest oparty na kolekcji (więc nie jest oparty na czymś w bazie danych)? Jak po prostu informacja, że coś zostało zrobione? Powiadomienie? – Mitar
W jakim wątku jest uruchamiane to zadanie cron? – Mitar
Jest to nieco bardziej skomplikowane, javascript w węźle będzie w jednym wątku, więc tutaj wkracza Fibers. Jeśli używasz Meteor.call w cronie do meteoru.metoda z twoim zadaniem zawierająca 'this.unblock' zawartość w metodzie z' this.unblock' będzie działała w nowym blistrze, aby nie blokować innych klientów. Jeśli chodzi o inne rzeczy, które może wysłać meteor, polecam liczniki według kolekcji pokoi: http://stackoverflow.com/questions/10565654/how-does-the-messages-count-example-in-meteor-docs-work dobre miejsce na rozpoczęcie, zależy od tego, co dokładnie chcesz wysłać. – Akshat
Możesz spróbować wywołać Meteor.setInterval
na serwerze (być może w Meteor.startup
). To powinno zadziałać, choć może nie być tak elastyczne jak rozwiązanie crona.
Chodzi o to, że mogę mieć niezależne procesy, nawet podzielić je na wiele serwerów. Tak naprawdę, ciężkie podnoszenie na maszynach roboczych. – Mitar
idź do http://atmospherejs.com i szukać cron
Najlepszym jeden znalazłem jest percolate:synced-cron
Instalacja
meteor add percolate:synced-cron
Podstawy
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();
zaawansowane
- 1. Zadania w tle dla aplikacji
- 2. Zadania w tle w Androidzie do synchronizacji z usługą sieciową
- 3. Symulacja zadania w tle na AppHarbor
- 4. Importowanie pliku JSON w Meteorzie
- 5. Uruchamianie zadania w wątku w tle okresowo w iOS
- 6. Pisanie w Meteorzie przy użyciu ClojureScript
- 7. blokowanie domyślnych zdarzeń przeciągania w Meteorzie
- 8. SML modułem graficznym Niezwiązane
- 9. IntelliJ IDEA: Widok zadania w tle zawiera zniekształcony/zniekształcony tekst
- 10. Android: uruchamianie zadania w tle za pomocą aplikacji AlarmManager
- 11. Jak przetestować zadania w tle (Sidekiq) za pomocą Rspec?
- 12. Jak dodać dane wejściowe niezwiązane z modelem za pomocą Formtastic
- 13. Trwałe połączenie z klientem
- 14. WebView z niestandardowym klientem HTTP
- 15. linux: zabij zadanie w tle
- 16. Prosty javascript nie działa w żadnym IE?
- 17. Dźwięk w tle z cocoalibspotify
- 18. Kolejka zadań w tle w rxjava
- 19. NSURLSession: przesyłanie zasobów z przeniesieniem w tle
- 20. Lista do posortowania metodą przeciągnij i upuść w Meteorzie
- 21. Jak znaleźć listę aplikacji dostępnych dla użytkownika w interwale za pomocą zadania w tle?
- 22. jak przekazywać parametry zapytania w java z klientem Http
- 23. Zabezpieczenia na poziomie wiersza w scenariuszu z klientem bazy danych
- 24. Pobieranie w tle iOS w tle dla lokalnych powiadomień
- 25. Uniform GLSL aktualizowany tylko przez niezwiązane połączenia
- 26. Forward nagłówek żądania z klientem RequestInterceptor udawać
- 27. Uruchamianie WebView w tle
- 28. Isomorphic JS - tylko strona z klientem httpRequest
- 29. Wykonywanie działań w tle
- 30. UITableViewController Obraz w tle
Należy pamiętać, że nie ma czegoś takiego jak „klient” w wątku Meteor, w przeciwieństwie do bardziej tradycyjnych rozwiązań. Żądania klientów są przetwarzane asynchronicznie, a nie wielowątkowe. –
Masz rację. Są włóknami, kooperatywnymi wielozadaniowości. – Mitar