Cytat(guitarnet.pl @ 23.04.2009, 20:26:12 )

w manualu masz 2 przyklady
http://us2.php.net/manual/en/function.ignore-user-abort.phpw 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:
<?php
$fp = fsockopen("127.0.0.1", 80
, $errno, $errstr, 30
); if (!$fp) {
echo "$errstr ($errno)<br />\n"; } else {
$out = "GET /test.php?koniech=10&koniecm=10&koniecs=00 HTTP/1.1r\n";
$out .= "HOST: 127.0.0.1r\n";
$out .= "Connection: Closer\nr\n";
}
}
?>
i plik 2 (test.php):
<?php
$koniec = $_GET['koniech'].':'.$_GET['koniecm'].':"'.$_GET['koniecs'];
echo'<br><br>Wykonuje skrypt...'; do{
$dane = date("h:m:s").' 'Zapisano
.' ';
$fp = fopen("baza.txt", "a"); if($koniec==date("h:m:s")){ break;
}
}while(true);
?>
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 :/