Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [?]Wykonywanie skryptu mimo opuszczenia strony
MnicH.
post 23.04.2009, 17:49:39
Post #1





Grupa: Zarejestrowani
Postów: 134
Pomógł: 4
Dołączył: 16.02.2007
Skąd: Leszno

Ostrzeżenie: (20%)
X----


Witam,
mam do was pytanie. Zastanawiam się jak i w czym można wykonać coś na styl wykonywania zadań jak np na plemionach lub innych takich gier? Że jak użytkownik wchodzi to widzi ile zostało do końca, a jeśli go nie ma zalogowanego to system sam wykonuje odpowiedni skrypt który miał się wykonać?
Zastanawiam się już od dłuższego czasu...


--------------------
"This isn't Miami..., This isn't Music! This is power!!"
Go to the top of the page
+Quote Post
dk1342
post 23.04.2009, 18:02:23
Post #2





Grupa: Zarejestrowani
Postów: 275
Pomógł: 9
Dołączył: 24.07.2008
Skąd: Racibórz

Ostrzeżenie: (10%)
X----


może cron ?


--------------------
Firefox - The Best,
Internet Exokier - shit

Go to the top of the page
+Quote Post
pyro
post 23.04.2009, 18:09:24
Post #3





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Dupcię trzeba czasem ruszyć. ignore_user_abort(true);


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
MnicH.
post 23.04.2009, 18:53:43
Post #4





Grupa: Zarejestrowani
Postów: 134
Pomógł: 4
Dołączył: 16.02.2007
Skąd: Leszno

Ostrzeżenie: (20%)
X----


Cytat(pyro @ 23.04.2009, 19:09:24 ) *
Dupcię trzeba czasem ruszyć. ignore_user_abort(true);

a mogę prosić o więcej informacji na ten temat? bo google coś ma ich mało :/
Może jakiś przykład, jak to stosować?


--------------------
"This isn't Miami..., This isn't Music! This is power!!"
Go to the top of the page
+Quote Post
Fifi209
post 23.04.2009, 19:15:22
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Tam masz ajax + cron ;d


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
michalg
post 23.04.2009, 19:29:55
Post #6





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

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


Nie wiem, jak te gry są zaimplementowane, ale ja bym obstawiał, że na serwerze jest stale (nie wywoływana cronem) uruchomiona aplikacja (serwer), która przetwarza logikę gry. Ty wchodząc na stronę pobierasz bieżący stan "świata" gry, wysyłasz pewne polecenia, które następnie są przetwarzane przez tą aplikację.

Przykład:
- uruchamiasz aplikację php (niekoniecznie przez apacha), która się nie kończy (serwer gry). Aplikacja w pętli przetwaraz logikę świata gry.
- użytkownik loguje się, na serwerze wykonuje się skrypt php który z serwera gry pobiera aktualny stan świata i przedstawia go użytkownikowi
- użytkownik klika polecenie budowy budynku, do serwera gry zostaje przekazana informacja, że budynek ma być wybudowany
- serwer gry zmniejsza co sekundę pozostały czas potrzebny do wybudowania budynku
- użytkownik po 15 minutach odświeża stronę i widzi, że do wybudowania budynku zostało jeszcze np 10 dni (z 20)
Go to the top of the page
+Quote Post
MnicH.
post 24.04.2009, 07:53:50
Post #7





Grupa: Zarejestrowani
Postów: 134
Pomógł: 4
Dołączył: 16.02.2007
Skąd: Leszno

Ostrzeżenie: (20%)
X----


Cytat(guitarnet.pl @ 23.04.2009, 20:26:12 ) *
w manualu masz 2 przyklady
http://us2.php.net/manual/en/function.ignore-user-abort.php
w tym rozwiazaniu musisz jakos zawiadomic dzialajacy w tle skrypt ze ma wykonac abort inaczej bedzie dziala nonstop, jest opis w przykladzie manualu

kilka dni temu bylo na forum o innej metodzie respawning czyli wywolanie skryptu przez samego siebie na lokalu tuz przed timeout, wykorzystuje to np system mailingowy pommo, wydawalo mi sie ze wykorzystywane do tego jest fsockopen aczkolwiek erix mial co do tego zastrzezenia, odsylam do tamtej klasy, podalem namiary w tamtym poscie


hmm... jest w tym coś. Dosyć ciekawy pomysł.


Cytat(michalg @ 23.04.2009, 20:29:55 ) *
Nie wiem, jak te gry są zaimplementowane, ale ja bym obstawiał, że na serwerze jest stale (nie wywoływana cronem) uruchomiona aplikacja (serwer), która przetwarza logikę gry. Ty wchodząc na stronę pobierasz bieżący stan "świata" gry, wysyłasz pewne polecenia, które następnie są przetwarzane przez tą aplikację.

Przykład:
- uruchamiasz aplikację php (niekoniecznie przez apacha), która się nie kończy (serwer gry). Aplikacja w pętli przetwaraz logikę świata gry.
- użytkownik loguje się, na serwerze wykonuje się skrypt php który z serwera gry pobiera aktualny stan świata i przedstawia go użytkownikowi
- użytkownik klika polecenie budowy budynku, do serwera gry zostaje przekazana informacja, że budynek ma być wybudowany
- serwer gry zmniejsza co sekundę pozostały czas potrzebny do wybudowania budynku
- użytkownik po 15 minutach odświeża stronę i widzi, że do wybudowania budynku zostało jeszcze np 10 dni (z 20)

interesujące i zarazem sprytne. Ale czy takie zastosowanie nie obciąży serwera?

co do sposobu guitarnet.pl zastanawiam się jak zatrzymać wykonywanie, czy wystarczy break w pętli?

@edit;

Pobawiłem się i zrobiłem coś takiego:

Plik 1:
  1. <?php
  2. $fp = fsockopen("127.0.0.1", 80, $errno, $errstr, 30);
  3. if (!$fp) {
  4.    echo "$errstr ($errno)<br />\n";
  5. } else {
  6.    $out = "GET /test.php?koniech=10&koniecm=10&koniecs=00 HTTP/1.1r\n";
  7.    $out .= "HOST: 127.0.0.1r\n";
  8.    $out .= "Connection: Closer\nr\n";
  9.    fwrite($fp, $out);
  10.    while (!feof($fp)) {
  11.        echo fgets($fp, 128);
  12.    }
  13.    fclose($fp);
  14. }
  15. ?>


i plik 2 (test.php):
  1. <?php
  2. $koniec = $_GET['koniech'].':'.$_GET['koniecm'].':"'.$_GET['koniecs'];
  3. echo'<br><br>Wykonuje skrypt...';
  4. do{
  5. $dane = date("h:m:s").' 'Zapisano.'
  6. ';
  7. $fp = fopen("baza.txt", "a");
  8. flock($fp, 2);
  9. fwrite($fp, $dane);
  10. flock($fp, 3);
  11. fclose($fp);
  12. if($koniec==date("h:m:s")){
  13. break;
  14. }
  15. sleep(60*5);
  16. }while(true);
  17.  
  18. ?>


Jak widać GET'em wysyłam do skryptu o której godzinie ma być koniec. Ale niestety skrypt działa dalej mimo tego że jest już ma być koniec :/


--------------------
"This isn't Miami..., This isn't Music! This is power!!"
Go to the top of the page
+Quote Post
michalg
post 27.04.2009, 18:08:48
Post #8





Grupa: Zarejestrowani
Postów: 122
Pomógł: 8
Dołączył: 20.10.2008

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


Ja bym zmienił warunek:

if($koniec == date("h:m:s"))

na

if($koniec <= date("h:m:s"))

Przecież niekoniecznie musisz "wstrzelić" się w odpowiedni czas zakończenia.
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: 14.08.2025 - 06:35