Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wywołanie akcji po określonym czasie
Hectic
post 6.05.2008, 18:12:14
Post #1





Grupa: Zarejestrowani
Postów: 256
Pomógł: 7
Dołączył: 1.01.2005

Ostrzeżenie: (0%)
-----


Witam,
zastanawiam się jak działają gry tekstowe. Dokładnie chodzi mi o coś takiego. Płynie statek ze złotem na inną wyspę... będzie tam za 18 min... gdy dopłynie gracz dostaje wiadomość o rozładowaniu złota. Jak rozwiązać coś takiego? Jedyne co przychodzi mi do głowy to cron... i ustawianie go z poziomy php... Statek zaczyna płynąć o 18.05 więc akcja zakończy się o 18.23 i taki wpis dodajemy do crona... ale przy dużej ilości graczy i akcji to chyba dość bolesne dla serwera... czy ma ktoś inny pomysł?


--------------------
Nie proś o to, idź i sam to zdobądź.
Zrób to, a osiągniesz sukces.
Go to the top of the page
+Quote Post
Synapsa
post 6.05.2008, 18:30:52
Post #2





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 15.06.2007

Ostrzeżenie: (0%)
-----


W bazie dodajesz czas zakończenia,a pózniej tylko sprawdzasz z akutalnym czasem.
A żeby było płynnie to js.
Go to the top of the page
+Quote Post
sniezny_wilk
post 6.05.2008, 18:35:11
Post #3





Grupa: Zarejestrowani
Postów: 732
Pomógł: 80
Dołączył: 25.05.2005
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


No co Ty smile.gif tam jest minimalna ilość crona, wszystko jest przeliczane po stronie serwerowej w momencie odświeżenia. Działa to tak:

1. Wysyłasz statek, pobierana jest wartość czasu potrzebna na dotarcie, zapisywana jest np w MySQL, oraz ładowana do funkcji JS która odlicza czas u Ciebie na bieżąco.
2. Przy każdym odświeżeniu jest ładowany aktualny czas do JS'owych funkcji aby sprawdzić czy jest dobry i go skorygować, sprawdzany jest również czas i jeden if.. Czy czas wypłynięcia + czas potrzebny do dopłynięcia jest >= od czasu który jest teraz jeśli tak, to jest wywoływana zdarzenie.
3. Także mimo, że się skończył czas płynięcia nie jest generowany żaden efekt, dopiero jak odświeżysz okno, lub odświeżenia wykona skrypt dopiero zobaczysz wynik
4. Tak jest przeliczana cała gra, cron jest zbędny.


--------------------
Go to the top of the page
+Quote Post
Babcia@Stefa
post 7.05.2008, 18:07:18
Post #4





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

Ostrzeżenie: (0%)
-----


Może źle zrozumiałem, myślę że można to też tak rozwiązać jak się generuje masowe statystyki w tle:

  1. <?php
  2. if(!is_file('statek.xml') OR (time()-filemtime('statek.xml')) > 100)
  3. {
  4. $socket = fsockopen('localhost', $_SERVER['SERVER_PORT'], $errorCode, $errorString, 1);
  5. if ($socket === false){
  6. echo 'Statek się rozwalił gdzieś na skałach, zatonął jak tytanic. Za chwilę wyślemy nowy ;)';
  7. } else { 
  8. $url = 'GET statek.php '.$_SERVER['SERVER_PROTOCOL']."r\n";
  9. fwrite($socket, $url);
  10. fwrite($socket, 'Host: '.$_SERVER['HTTP_HOST']."r\n");
  11. fwrite($socket, 'User-Agent: Tajne_dane'."r\n");
  12. fwrite($socket, 'Content-Length: 0'."r\n");
  13. fwrite($socket, "r\n");
  14. fclose($socket);
  15. }
  16. echo 'Statek jeszcze nie przypłynął.';
  17. } else {
  18.  echo 'Statek gotowy...';
  19. }
  20. ?>


Kiedyś używałem takiego kodu do masowego generowania statystyk.
Pamiętaj aby sprawdzać datę pliku w wywoływanym pliku statek.php, inaczej kilka osób otworzy stronę naraz i masz po serwerze (przeciąrzenie).
Sprawdzaj User-Agent (ustal dowolny zamiast Tajne_dane, to może służyć jako hasło.)

Myślę że pomogłem smile.gif

Dziękuję, Babcia@Stefa

Ten post edytował Babcia@Stefa 7.05.2008, 18:08:00


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
Hectic
post 7.05.2008, 19:00:15
Post #5





Grupa: Zarejestrowani
Postów: 256
Pomógł: 7
Dołączył: 1.01.2005

Ostrzeżenie: (0%)
-----


Dzięki za pomoc Panowie, chyba już wiem o co chodzi biggrin.gif


--------------------
Nie proś o to, idź i sam to zdobądź.
Zrób to, a osiągniesz sukces.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 23.04.2024 - 14:43