Usuwanie ogłoszeń po upływie określonego czasu

0

Witam, tworze serwis ogłoszeń i zastanawiam się nad teraz nad wykonaniem skryptu który automatycznie będzie usuwał ogłoszenia po określonym czasie. Wiem, że można to zrobić przy pomocy cron ale to nie jest chyba najbardziej optymalne rozwiazanie. Jeżeli dobrze rozumiem cron po prostu uruchamia cyklicznie określone skrypty np. Co 10 min.
Ja czas końca ogłoszenia przechowuje sobie w bazie danych, i zależy mi by w tym czasie skrypt usuwania zakończonych aukcji był uruchomiony. Nie szukam rownież rozwiązania w którym to użytkownik odświeżając stronę uruchamia skrypt. W jaki sposób można to rozwiązać. Jak mają to rozwiązane na Allegro. Jak podobne zdarzenia czasowe działają w grach przeglądarkowych. Np określony czas budowy budynku czy walki, i po jego upływie otrzymanie nagrody ?

1

Przede wszystkim takie rzeczy kiepsko się robi w PHP, bo PHP jest bezstanowe. Wysyłasz żądanie, serwer ładuje wszystko od nowa, parsuje kod, łączy się od nowa z bazą, pobiera wszystko, a po zwróceniu odpowiedzi rozłącza się z bazą, zapomina wszystko.

Aplikacje w (niektórych) innych językach działają stale, mogą mieć zmienne i timery, które cały czas są w pamięci i działają - dodatkowe żądanie wtedy powoduje wykonanie już znanego kodu, skorzystanie z istniejącego połączenia z bazą, dopisanie jakiegoś timera, który w czasie rzeczywistym potem wykona jakąś akcję, bo nawet gdy serwer nie obsługuje żadnych żądań z przeglądarek to on cały czas działa.

Dlatego polecam zmienić technologię w takim przypadku.

A jak się nie da to zostaje cron.

Jeżeli nie musisz wysyłać żadnych powiadomień w czasie rzeczywistym, to po prostu zrób pole data_wygasniecia i wybierając ogłoszenia na listę zrób po prostu warunek data_wygasniecia>NOW() i to wystarczy.

0

Jakimś rozwiązaniem będzie wykonanie odpowiedniej metody, która znajdzie i usunie odpowiednie ogłoszenia przy każdym wyświetleniu listy. Jest to bardzo nieefektywne i prymitywne.

Czy masz jakieś konkretne powody, przez które nie możesz używać crona?

0

a to nie mozna tego filtrowac i pobierac z bazy jedynie ogloszenia "live", czyli zamiast wyciagac wszystkie ogloszenia to wyciagasz te gdzie czas zakonczenia jest wiekszy niz zcas obecny. DOdatkowo pisze metode rozszerzajaca IsLive, ktora w locie ci moze sprawdzic wszystkie warunki jakie sa potrzebne do spelnienia by aukcja byla "live". poznijesza jest latwa modyfikacja tego. A co do strony indywidualnej, to przy zaladowaniu aukcji w do zmiennej JS zapakuj czas zakonczenia i odliczaj, ew. dla pewnosci odswiezaj ten czas ajaxem (ale z glowa, czyli jak czas aukcji jest >24 h to co godzine, sprawdzaj poprawnosc, a jak mneijszy to czesciej). I tak JS bedzie odliczal czas, ale dla jakis tam manipulatorow resetuj go. oczywiscie po stronie serwera tez bedziesz sprawdzal ew. hacki/ataki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1