Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wykonywanie kodu na serwerze co 1s
Forum PHP.pl > Forum > PHP
Xardian
mam dość poważny problem od paru dni zastanawiam sie jak wywołać pewien kod php wykonywany co 1s
skrypt będzie pobierał dane z mysql'a lub pliku i odpowiednio je przetwarzał.
Myślałem nad użyciem Cron'a ale najkrótszy okres czasu jak mi sie wydaje to 1 min winksmiley.jpg
myślałem nad zapętleniem lub samo czynnym odświeżaniu pliku ale myślę, że spowoduje to spore obciążenie serwera.
Chyba wielowątkowej aplikacji w php sie nie napisze -.-(jeśli się myle popraw mnie winksmiley.jpg )
Jeśli kto miał by pomysł jak ten problem można rozwiązać w php lub perlu (słyszałem coś o fastCGI) ostatecznie w jakimś innym języku winksmiley.jpg byłbym bardzo wdzięczny.
domis86
a co chcesz robic co sekunde? Moze nie trzeba tego tak czesto robic...
Xardian
Właśnie niestety trzeba winksmiley.jpg
Potrzebne jest mi to do napisania gry i utknąłem właśnie na kontroli poruszających się jednostek chodzi tu miedzy innymi o czas dotarcia jednostek do celu, ataku i powrotu.( to już końcówka projektu a nie jakieś mżonki )
SirZooro
Możesz spróbować postawić jakiś proces działający w tle który by to robił, ale pewnie byś musiał pogadać z adminem aby go zainstalował. Możesz też rozważyć modyfikację tych danych na początku każdego skryptu php (tylko że w tym przypadku nie będziesz miał co 1 sek, tylko różne okresy czasu).
Xardian
szczerze to nie wiem jak sie instaluje procesy winksmiley.jpg(nie miałem okazji tego robić winksmiley.jpg )
a co do wrzucenia tego do każdego skryptu spowodowało by to piekło haha.gif co esli w ciagu 10 wejdzie powyżej 10 uzytkowników ? jest to chyba najbardziej nieoptymalne rozwiąanie winksmiley.jpg i w tym przypadku to chaos by się zrobił.
chyba najprościej byłoby było wykonanie skryptu php, perl za pomocą crona a w skrypcie umieszczenie funkcji wykonywanej co 1s(i tu problem jak to zrobić haha.gif )
domis86
Jak w sekunde wchodzi 10 ludzi, to mozna np gdy wejdzie pierwszy i trzeba zrobic update to on zaklada plik update.lck, ktory ma powiedzmy 1 bajt. Wtedy reszta zawsze sprawdza czy juz jest ten plik lck - jak jest to znaczy ze jaksi inny proces juz robi update wiec ten nie musi. Jak tamten proces skonczy update to usuwa plik.
Xardian
w porządku to by działało jak ktoś siedzi klika a jak nikt nie klika to rozwiązanie chyba nie zadziała.
tutaj chodzi o całodobowo wykonywany skrypt co 1s.
właśnie przypadkiem wpadłem na pomysł wykorzystania Program Execution Functions
pozwoli to chyba na otwarcie procesu jeszcze nie mialem sposobności korzystania z tych funcji
tylkomi najbardziej zalezy na napisaniu w ten spoub zeby to nieblokowalo php i procesora -.-

  1. <?php
  2. $runCommand = 'php -q FULLPATH/FILE.php';
  3.  
  4. if(isset($_SERVER['PWD'])//*nix (aka NOT windows)
  5. {
  6. $nullResult = `$runCommand > /dev/null &`;
  7. }
  8. else //windowz
  9. {
  10. $WshShell = new COM("WScript.Shell");
  11. $oExec = $WshShell->Run($runCommand, 7, false);
  12. }
  13. ?>

takie rozwiązanie chyba powinno kontynuować srypt zapętlony w nieskończoność?
co pawda daje to mozliwosc napisania w c++ pewnie bylo by to bardzo wydajne ;] ale jakos niechcialo mi się uczyc tego języka -.-
pozostal mi problm jak powtarzac funkcje w pliku co 1s
  1. <?php
  2. ?>

to powinno zabezpieczyc przed przerwaniem
ale jakos naprwade nieprzychodzi mi do glowy wywolanie funkcji co 1s niewiem jaki powinien byc warunek ma ktos jakis pomysł
SirZooro
Jest jeszcze coś takiego jak transakcje w bazach danych, i coś takiego co blokuje wybrane rekordy do edycji:

  1. SELECT ... FOR UPDATE


Zerknij też tutaj: http://dev.mysql.com/doc/refman/5.0/en/inn...king-reads.html

Edit:
Skoro pracujesz na Windows, mogą Cię zainteresować artykuły dotyczące pisania usług w C#:
Self installing .NET service using the Win32 API
Implementing a small Cron service in C#
Xardian
owszem w tej chwili pracuje na win ale wersja finalna zostanie umieszczona na unixowym systemie na serwerze dedykowanym wiec c# odpada jak dobrze pamietam c++ dziala na unixach chyba że się mylę.
(tko by instalował windowsowy serv który kosztuje kupe kasy jak moze miec darmowy winksmiley.jpg )
crona na win rowniez posiadam na perlu nie c#

myśle ze taki prosty kod
  1. <?
  2. for ($i = 1; $i <= 60; $i++){
  3. sleep (1);
  4. //
  5. //caly szereg funkcji
  6. //
  7. //
  8. //
  9. //
  10. ;}
  11.  
  12. ?>

w tym przypadku dla 60s winksmiley.jpg powinien wystarczyć

przykład dość dobrze jak narazie działa wpakowałem go do crona co 1 min wiec jest wykonywany co 1s w rzeczywistości winksmiley.jpg
zabezpieczyłem dane w bazie podczas odczytu według rady dziękuje za podpowiedź :]
.chudy.
Wg mnie na takim projektem większość poleceń powinna być wykonywana w bazach danych z urzyciem zawansowanych poleceń. Wcześniej wspominianych transakcji i wyzwalaczy. Albo uruchomić proces (napisać np. w c++) co będzie zarządzał tymi wszystkimi jednostkami na bierząco. A php niech będzie tylko front-end'em.
Xardian
Też myślę że wielowątkowy proces w c++ jest najlepszym rozwiązaniem ale finalnym raczej podczas ciągłego pisania lepszy jest niekompilowany język szybciej można poprawić winksmiley.jpg
a przeróbka php->c++ nie powinna być trudna składnia mniej więcej podobna.
właśnie pobieram sobie VS 2k8 betę 2 winksmiley.jpg edycja pro winksmiley.jpg póki skąpy na pieniążki Microsoft daje za darmo biggrin.gif
wydaje mi się że to najlepsze środowisko c++ ładna obsługa błędów itd. itd. (kiedyś się tym bawiłem z D3D :] ) miałem inne windowsowski środowiska min devc haha.gif nie dało sie d3d zastosować zapewne inne biblioteki tez były wyjęte z niewiadomego plecaczka.
w ten sposób z rozwiązania php przeszłem do multithread c++(potem jeszcze dostosowanie do *nixa -.- bo nie mam ochoty instalować kolejnego sys i pisania pod niego).
.chudy.
Cytat(Xardian @ 3.12.2007, 22:43:52 ) *
Też myślę że wielowątkowy proces w c++ jest najlepszym rozwiązaniem ale finalnym raczej podczas ciągłego pisania lepszy jest niekompilowany język szybciej można poprawić winksmiley.jpg
a przeróbka php->c++ nie powinna być trudna składnia mniej więcej podobna.
właśnie pobieram sobie VS 2k8 betę 2 winksmiley.jpg edycja pro winksmiley.jpg póki skąpy na pieniążki Microsoft daje za darmo biggrin.gif
wydaje mi się że to najlepsze środowisko c++ ładna obsługa błędów itd. itd. (kiedyś się tym bawiłem z D3D :] ) miałem inne windowsowski środowiska min devc haha.gif nie dało sie d3d zastosować zapewne inne biblioteki tez były wyjęte z niewiadomego plecaczka.
w ten sposób z rozwiązania php przeszłem do multithread c++(potem jeszcze dostosowanie do *nixa -.- bo nie mam ochoty instalować kolejnego sys i pisania pod niego).

Szybciej i wyglądniej będzie dla Ciebie jak ominiesz proces portowania aplikacji, a co do deva tam D3D również działa tylko trzeba czasami przeczytać instrukcje winksmiley.jpg
Xardian
tak do deva to niedokonca dziala winksmiley.jpg bawilem sie ich dodatkowymi bibliotekami staneły chyba na d3d8 albo nizej winksmiley.jpg a tutaj prosto i wygodnie moge sobie pakiecik d.SDK :] a biblioteczka jest w wresji d3d9 i d3d10 biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.