Mam następujący problem: użytkownik chce wygenerować mapę na podstawie posiadanych danych (konkretnie rekord w MySQL). Na stronie klika przycisk "Wygeneruj mapę". Żądanie zostaje zapisane w bazie MySQL jako do zrobienia. Następnie jest uruchamiany skrypt, który ma za zadanie pobrać żądania z bazy, wysłać na ich podstawie odpowiednio przygotowane zapytanie do zewnętrznego serwisu, poczekać na odpowiedź (w granicach 5-15 sek.), otrzymane dane przemielić do pliku, plik zapisać na serwerze, a link do pliku zapisać do rekordu żądania, tak aby użytkownik mógł go ściągnąć w dogodnym czasie.
Wszystko działa dopóki mam jedno żądanie w bazie. Jeśli żądań jest do zrobienia więcej, zajmują one za dużo czasu niż skrypt ma dozwolone (ograniczenia nie mogę zdjąć, jest odgórnie ustawione). Zastanawiałem się nad
, ale w przypadku zapytania przez AJAX lub cron nie ma sensu. Cron co 10 min. w celu sprawdzenia i ewentualnego wykonania kolejnego żądania też mija się z celem, bo 1) znakomita większość czasu nie będzie nic do zrobienia, 2) każde wywołanie cron to wysłanie maila z raportem(czytaj zawalenie skrzynki).
http://www.php.net/header(...)
Wrzucaj takie zadania do kolejek (typu rabbitmq) a użytkownikowi możesz generować link który będzie dopiero aktywny za jakiś czas.
Ustaw limit czasowy na większy.
Zmień serwer na lepiej wydajny.
Użyj rozwiązań chmurowych.
Podziel wywołanie CRON raportu na kilka plików, a potem przy ostatnim wywołaniu, zsumuj pliki i wyślij raport.
Zrób zadanie w CRON które ma sprawdzać czy może wysyłać email gdy zadanie z generowaniem raportu ustawi flagę w bazie: "TerazWyslijEmail" czy jakoś tak.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)