Kilkukrotne wywołanie skryptu PHP w tle |
Kilkukrotne wywołanie skryptu PHP w tle |
31.10.2019, 23:43:34
Post
#1
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 28.12.2011 Ostrzeżenie: (0%) |
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). Czy ktoś się spotkał z podobnym problemem? Jak wywoływać kolejny raz skrypt, tak aby nie przekroczyć limitu czasowego? |
|
|
1.11.2019, 06:26:32
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Wrzucaj takie zadania do kolejek (typu rabbitmq) a użytkownikowi możesz generować link który będzie dopiero aktywny za jakiś czas.
-------------------- |
|
|
1.11.2019, 06:28:37
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 832 Pomógł: 225 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
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. |
|
|
7.11.2019, 13:41:15
Post
#4
|
|
Grupa: Zarejestrowani Postów: 57 Pomógł: 3 Dołączył: 28.12.2011 Ostrzeżenie: (0%) |
Ustaw limit czasowy na większy. Widać, że ktoś niedokładnie zapoznał się z treścią posta. Nie, nie mogę ustawić limitu na większy, jest zablokowana funkcja na hostingu. Póki co, użytkownicy sami wywołują skrypt za pomocą AJAX, który działa sobie w tle i nie jest wrażliwy na zamknięcie strony/ przeglądarki. Zobaczę jak się rabbitmq będzie sprawował. |
|
|
Wersja Lo-Fi | Aktualny czas: 18.04.2024 - 06:12 |