MeGusta
20.07.2015, 20:58:04
Witam, jak zrobić odliczanie które będzie odporne na odswiezenia i czytało czas ze zmiennej $czas_misja i po odliczeniu wykonało się zapytanie. Proszę o pomoc.
Skie
21.07.2015, 09:25:15
Najprościej, przez HTTP to będzie
1. Pobierać czas końca operacji z serwera - np bazy danych
2. Wyświetlić użytkownikowi timer na stronie względem tego czasu pobranego z serwera - tzn ile czasu zostało do tej konkrtnej daty
3. W momencie dobicia 00:00:00 odpalić skrypt, który robi coś co ma się odbyć po zakończeniu odliczania. To jest najtrudniejsza rzecz, bo w przypadku HTTP i PHP, nie masz zdemonizowanego procesu serwera i to co masz dostępne to:
3.1. Uruchomić skrypt, wtedy gdy któryś z użytkowników, kogo ten timer dotyczy jest aktywny na stronie.
3.2. Uruchomić skrypt, wtedy gdy kolokwiek jest online.
3.3. Za pomocą CronJobs wywoływać co jakiś interwał - np co sekundę - skrypt, który sprwadza WSZYSTKIE aktywne timery i wykonuje odpowiednie operacje.
3.1. Jest dobry, wtedy kiedy timery, na których operujesz nie są globalnie dostępne - np limit produkcji budynków na godzinę - ponieważ, innego użytkownika ten timer nie dotyczy. Spychając ten timer do sprawdzania tylko wtedy kiedy użytkownikow, którego ten timer dotyczy jest aktywny, zmniejszy obciążenie serwera.
3.2. Jest metodą, którą używały starsze gry oparte o Gamers-Fusion i/lub Vallheru Engine. Silnik w ten sposób symulował CronJobs, który w tamtych latach nie zawsze był dostepny na hostingach, a serwery dedykowane pod gry były rzadkością. Możesz sprawdzić jak to jest tam zrobione, aczkolwiek jest to najgorszy sposób jaki możesz wybrać.
3.3. Jest to najlepsza metoda dla globalnych timerów, czyli takich, które dotyczą wszystkich graczy - np. respawn bossa - ze względu na brak opóźnień w triggerowaniu eventu i prostocie synchronizacji tychże eventów. Jednak, taki skrypt potrafi bardzo szybko stawać się ociężały, jak zaczniesz dodawać coraz więcej mechanizmów i będzie coraz więcej graczy.
Ponadto,
w przypadku tworzenia gry, co widzę z Twoich postów, robisz, nie polecam podejścia opartego o HTTP. Przez HTTP pobierz tylko główny template gry, ew. media, ale całą resztę leć WebSockety. Zaoszczędzi Ci to dużo problemów, których w tej chwili pewnie nie jesteś jescze świadom.