![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 1 Dołączył: 14.12.2004 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Mam skrypt do wysylki mailingu. Baza maili moich uzytkownikow liczy ponad 22 tysiace, wiec radze sobie tak: set_time_limit(300); pobierz 80 maili sposrod tych do ktorych jeszcze nie wyslano jezeli sa maile to w petli wyslij i zapisz, ze wyslano sleep(3); header(odswiezenie strony) jezeli nie ma juz maili header(strona glowna wysylki mailingu) I problem tkwi w tym, ze zawsze po ok 3 minutach (+/- 200 sekund) wywala mi w przegladarce: Kod Nieprawidłowe przekierowanie Firefox wykrył, że serwer przekierowuje żądanie tego zasobu w sposób uniemożliwiający jego ukończenie. Czy po przekierowaniu header czas wykonania skryptu nie liczony jest na nowo? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Pilsener... Pogadaj sobie o Cronie w sytuacji gdy masz limit skryptu 30 sekund + możliwość odpalania co 5 minut + setki tysięcy maili. Jeśli w ciągu 24h wyślesz wszystkim generowany indywidualnie mail to gratuluję (IMG:style_emoticons/default/biggrin.gif) Weź pod uwagę, że nieraz w paczce możesz posłać tylko około 100-200 maili zanim skończy się limit, co daje:
200*12(razy w ciągu godziny)*24(godziny)~=57.000 maili na dobę (IMG:style_emoticons/default/biggrin.gif) Jak Ty chcesz ominąć ten problem przy wysyłce choćby 60.000 maili? (IMG:style_emoticons/default/winksmiley.jpg) Cron Ci tutaj może poskakać, bo 3.000 userów maila nawet nie wyślesz. Pomyślałeś o tym przypadku? Wtedy jesteś zmuszony używać wywoływania skryptu w postaci nie-cronowej i sam wymyślić metodę. Tak więc wyskakiwanie z "amatorszczyzną" w chwili gdy nie ma ktoś innej możliwości jest delikatnie mówiąc bezpodstawnym obrażaniem. Skrypt można wywołać cronem, ale musi się on wykonywać w tle i być odporny na limity czasu wykonania. Jeśli dobrze go napiszesz to pozostaje Ci jedynie odpalanie go z crona automatycznie o którejś tam godzinie. Poza tym dla Twojej wiedzy... Skrypt obsługujący tego typu jakoś codziennie o 2-3 w nocy odpala cron na serwisie jednym nad jakim sprawuje opiekę i jakoś nie miał ani razu problemu, maile zawsze do wszystkich dochodzą, a ja sobie spokojnie śpię w tym czasie i mam w nosie czy trwa to 5 minut czy 5 godzin. Może dla iluś tam tysięcy cron dałby radę, ale: 1. Uruchamiasz skrypt co 5 minut niezależnie czy są zadania do zrobienia czy nie, mój odpala się raz i leci do upadłego. 2. Nie masz pewności czy posłało wszystkie maile, a w moim wypadku nawet jeśli serwer padł w trakcie wysyłki, to następnej nocy skrypt i tak "nadrobi" zaległości automatycznie. bez ingerencji z mojej strony. Dodatkowo mogę go odpalać ręcznie z przeglądarki i zamknąć ją bez obawy o zatrzymanie skryptu ( poczytaj nieco to znajdziesz o ignore user abort ) 3. Nie muszę ingerować w nic. A nawet jeśli obciążenie serwera będzie na tyle ogromne i skrypt zakończy się z powodu limitu czasu to śmiało wznawiam go kiedy chcę. Jest tak napisany, że podejmie pracę od miejsca przerwania. Czy zrobię to ręcznie czy napiszę w cronie by "na wszelki wypadek" robił to co X godzin jest nieistotne, bo nie wykona się jeśli nie ma nic do zrobienia. Potęga algorytmu nad prostym wklepaniem do harmonogramu: "Wykonuj co 5 minut". Bo wykonywanie skryptu z odstępem 20 sekund przez Y minut na serwerze z limitem czasu skrypty 30 sekund i cronem co 5 minut to zauważalny skok wydajności. Ty zrobisz 200 maili w cronie, a ja około 3000 w skrypcie. Widzisz różnicę czy nadal uważasz rozwiązanie za "prowizoryczną amatorszczyznę"? Ja znam tylko jeden serwis z cronem co minutę. Znasz jakiś, który posłałby kilkaset tysięcy generowanych indywidualnie maili (treść jest generowana na podstawie konfiguracji ustawianych przez usera z poziomu jego panelu newslettera) z cronem co 5 minut i limitem skryptu 30 sekund? To jest matematycznie niemożliwe do wykonania co Ci udowodniłem ciut wyżej w podliczeniu. Które podejście nadal uważasz za sensowniejsze? EDIT: Brak crona w przypadku serwisu też nie jest problemem. Ty proponujesz zdalne uruchamianie skryptu co ileś tam. Jest sens tego? Nie lepiej odpalić skrypt "raz a porządnie"? Ten post edytował thek 18.12.2009, 13:22:55 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 00:10 |