![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 1 Dołączył: 28.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Posiadam serwer wirtualny na ovh. Mam na nim dostęp do crona z najczęstszym wywołanie co godz. Chcę wysłać około 10 000 maili dziennie. Problem w tym że ovh udostępnia tylko funkcje mail() i blokuje SMTP(PhpMailer nie działa). Czy ktoś ma pomysł jak zorganizować taka wysyłkę maili z wykorzystaniem crona i bez robienia paczek. Czy skrypt który będzie miał 500 razy wywołana funkcje mail nie spowoduje zablokowanie konta lub przeciążenia serwera? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 7 Dołączył: 8.10.2009 Skąd: Lubin Ostrzeżenie: (0%) ![]() ![]() |
Wątpię, żeby to przeciążyło serwer...
A jak: mail($do, $temat, $tresc); wywołane x razy i tyle. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 1 Dołączył: 10.10.2009 Skąd: Cieszyn / Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Jednym z rozwiązań jest kolejkowanie maili np w bazie danych, następnie odpalanie z crona skryptu do wysyłania np co 5 min i z każdym wywołaniem pobierać z bazy i wysyłać np 50 maili. Powinno przejść a dodatkowo będziesz miał dość skalowalny system (np możesz wysyłać maile z kilku serwerów i będą korzystały tylko z jednej bazy).
Taka jest moja sugestia (IMG:style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Myślę, że przy takim odświeżaniu najlepiej zrobić sobie skrypt odpalający sam siebie. Za jednym uruchomieniem cron i standardowym czasem trwania skryptu 30 sekund poślesz może 200-500 maili, zależnie od tego co w mailingu robisz i jak obrabiasz treść. Przy 24 odpaleniach na dobę moższ nie uzyskać 10k maili. By to osiągnąć musisz obejść 30 sekundowy limit trwania skryptu. Nawet na forum tu kiedyś pisałem prawie gotowca jak to zrobić. Chodzi o to, by skrypt po wysłaniu iluś maili uruchamiał sam siebie jako "nowy wątek" a stary zamykał. Robiłby to tak długo, aż nie zakończyłby wysyłki. A to czy wysłałby 1.000 czy 100.000 to już nieważne dla niego. Istotną wadą tego rozwiązania jest niemożliwość zatrzymania tego skryptu w zasadzie inaczej niż użycie kill w powłoce lub restart usługi, więc to ryzykowne zagrane bez dokładnego sprawdzenia i przemyślany warunek STOP jest tu niezbędny bo inaczej zajedziesz serwer.
@Capker... Przeczytaj posta kolegi dokładnie... Ma Crona do wywołania co godzinę jedynie a nie co 5 minut. Takie kolejkowanie więc nie ma sensu, bo 50 maili co godzinę nie zda egzaminu. Skrypt musi być uruchomiony raz, ale nie może zostać zatrzymany po 30 sekundach przez serwer jako "nie odpowiadający" czy "zawieszony". Może zajść sytuacja, że będzie musiał pracować kilka minut, na co niemal żaden usługodawca nie pozwala. Tak więc rozwiązanie z wywoływaniem rekurencyjnym skryptu jest moim zdaniem jednym z nielicznych, o ile nie jedynym jakie dało by radę to zrobić. Ten post edytował thek 11.10.2009, 10:18:13 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 1 Dołączył: 28.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
thek pomysł całkiem ciekawy tylko jak pisałeś dość ryzykowny! Jak dla mnie wadą jest to że nie umiem pisać w obiektach. Pamiętasz może gdzie pisałeś o tym prawie gotowcu, a może masz sprawdzone i działające takie rozwiązanie?
Dumdas no właśnie wydaje mi się że mogło by to przeciążyć bo przecież to by było wywołanie kilku jest funkcji w prawie jednoczesnej chwili. A po za tym możliwe że jest ograniczenie ilość wysyłanych wiadomości jednocześnie. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 1 Dołączył: 10.10.2009 Skąd: Cieszyn / Gliwice Ostrzeżenie: (0%) ![]() ![]() |
thek, sorry - mój błąd (IMG:style_emoticons/default/winksmiley.jpg) biję się w pierś
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 1 Dołączył: 28.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
A czy takie rozwiązanie jest dobrym pomysłem. O północy tworze liste maili do wysłanie. Co godzine wywołuje crona i wysyłam po 100 maili a po nich wywołuje funkcje
usleep(10000000); // czeka 10 sek Szukając po sieci nalazłem http://www.webcron.pl/. Zewnętrzny cron tylko że serwis wstrzymał działaność, a czy znacie darmowego takiego crona? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 1 Dołączył: 10.10.2009 Skąd: Cieszyn / Gliwice Ostrzeżenie: (0%) ![]() ![]() |
Apropo pomysłu podanego przez Ciebie to możesz skorzystać z dowolnego serwera posiadającego crona (np od znajomego (IMG:style_emoticons/default/winksmiley.jpg) ) i tam wymuszać wywołanie twojego skryptu np przez ściągnięcie go (coś ala "wget www.domena.pl/adres_skryptu.php").
Z usleepem też można spróbować, głupie to nie jest. |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 65 Pomógł: 7 Dołączył: 8.10.2009 Skąd: Lubin Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Pomysł jest ryzykowny, ale dobrze zaprogramowany skrypt sam się zatrzyma. Podstawa to dobry warunek zatrzymujący "wątki". Ja miałem to zrobione tak, że po uruchomieniu pobierałem paczkę danych do mailingu, usypiałem skrypt na ileś sekund (by nie zajeżdżać serwera), a po obudzeniu robiłem co trzeba i wywoływałem nowy, stary jednocześnie killując. Sztuczka polegała na tym, że każdy w mailingu miał flagę w postaci daty. Jeśli skrypt kogoś przerobił, temu flaga się ustawiała na datę aktualną, niezależne czy maila wysyłał czy nie. A paczki nowe pobierał tylko spośród tych, którzy ową datę mieli inną niż aktualna. W ten sposób liczba stale się zmniejszała, aż nie było nikogo z inną datą niż aktualna. W tym momencie skrypt sam się zatrzymywał. I tak też w owym poście opisałem to rozwiązanie, ale gdzie on jest to niestety musiałbym w "Szukajce" pogrzebać (IMG:style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.09.2025 - 14:10 |