Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie zdarzeń w meczu siatkarskim
Forum PHP.pl > Forum > PHP
Apocalyptiq
Witam!

Pracuję nad menedżerem siatkarskim, robię jego drugą wersje (poprzednią pisałem bez żadnego frameworka i taki jest burdel w kodzie, że aż sie nie chce w kod zaglądać biggrin.gif).

W grze tej jest transmisja meczów na żywo. W poprzedniej wersji rozwiązałem to tak, że o godzinie startu meczu generowałem wszystkie jego wydarzenia, do końca, a później tylko stopniowo te wydarzenia (akcje) serwowałem oglądającym.

Teraz chciałbym wprowadzić możliwość wprowadzania podczas meczu zmian, więc poprzednie rozwiązanie meczu odpada.

Jedna akcja trwa tak średnio 15 sekund, więc cron jobem nie da rady ich stopniowo generować - crona można najcześciej włączać co 1 min (chyba że tylko na moim hostingu tak jest, ale myśle że nawet jakby dało rade, zajechałbym pewnie serwer :-)

Jeden pomysł jaki narazie wpadł mi do głowy, to tak: wygenerować zdarzenia pierwszej akcji, uśpić php ( sleep() ) na czas trwania akcji, następnie wygenerować następną itp. Tylko że hosting, na którym najprawdopodobniej będzie gra (prohost.pl) ma limit wykonywania skryptu na 40 sekund, więc i tu klapa :/ Jakby ten limit był chociaż na minutę, może i dałoby radę - co minute odpalać cronem obliczacz akcji, i na zmiane generowanie akcji i sleep(). Ale czy to jest dobre rozwiązanie?

Może ktoś pracował przy podobnym projekcie, macie jakieś fajne pomysły, jak generować poszczególne akcje tak, aby dać możliwość użytkownikom ingerencji w przebieg meczu (zmiany, branie czasu)?
wookieb
Cytat(Apocalyptiq @ 8.08.2009, 17:29:20 ) *
Teraz chciałbym wprowadzić możliwość wprowadzania podczas meczu zmian, więc poprzednie rozwiązanie meczu odpada.

Nie. Możesz sobie wygenerować wszystkie zdarzenie i zaciągąć je co jakiś czas ajaxem.
Cytat
Jedna akcja trwa tak średnio 15 sekund, więc cron jobem nie da rady ich stopniowo generować - crona można najcześciej włączać co 1 min (chyba że tylko na moim hostingu tak jest, ale myśle że nawet jakby dało rade, zajechałbym pewnie serwer :-)

Cron ma minimalny zakres 1 minuty. Aby zadanie wykonywało się częściej musisz zrobić to co poniżej;

Cytat
Tylko że hosting, na którym najprawdopodobniej będzie gra (prohost.pl) ma limit wykonywania skryptu na 40 sekund, więc i tu klapa :/

http://pl.php.net/set_time_limit jeżeli da radę.

Cytat
Może ktoś pracował przy podobnym projekcie, macie jakieś fajne pomysły, jak generować poszczególne akcje tak, aby dać możliwość użytkownikom ingerencji w przebieg meczu (zmiany, branie czasu)?

Myślę ze generowanie ich ajaxem co jakiś czas byłoby bardzo dobre. W sensie przy pobieranie danych ajaxem generujesz zdarzenie, które uwzględnia zmiany użytkownika. Gorąco polecam tutaj wykorzystanie flasha i AMF
kfc4
A nie możesz po prostu wyliczyć jedną akcję, przekazać ją i zakończyć skrypt, później za pomocą jakiś zmiennych (np. POST), przesłać do skryptu informacje co chce user zrobić, i wylicz akcję i mu ją przesłać? Całość będzie js/ajax więc w miarę dynamicznie.

// Kurde, spóźniłem się.
Apocalyptiq
Hm, nie wiem czy opieranie generowania meczu na requestach użytkowników oglądających mecz będzie dobrym rozwiązaniem. Dany mecz może oglądać jednocześnie sporo osób, nie tylko właściciele uczestniczących w nim drużyn, ale też jakiegoś meczu może akurat nikt nie obejrzeć, a wygenerować go by należało (raport z meczu) :-)

set_time_limit() nie daje rady, nadal po 40 sekundach skrypt siada :/
wookieb
W takim razię sądzę, że powinieneś generować relację dla całego meczu, a jeżeli coś zostanie zmienione w jego parametrach to od aktualnego momentu generować dalsze wydarzenia.
Apocalyptiq
Dzięki za poradę, właśnie wpadłem na coś podobnego :-)

Więc tak, mecz startuje CRON, który odpala się np. o 18:00 i generuje akcje, aż dosięgnie nastepnej minuty (np. pierwsza akcja trwa 20s, druga 25sek, trzecia 19sek, to już mam w sumie 1 min i 4 sek, czyli starczy). Jeżeli żaden user nie ingerował w mecz - relacja idzie. Jeżeli np. wprowadził zmiane - jego request usuwa wszelkie akcje, które zostały wygenerowane po tej, po której wprowadził daną zmianę i od razu wykorzystuję ten request aby wygenerować akcje do końca danej minuty. Troche rozwiązanie na około, ale trzeba się dostosowywać do tego, co się ma do wykorzystania biggrin.gif Spróbuję to zrobić właśnie w ten sposób, no bo serwer dedykowany to już większy wydatek - najtańszy na moim hostingu kosztuje 100zł na miesiąc, więc dopiero co startująca gra raczej nie da rady wygenerować tyle kasy, aby go utrzymywać, najwyżej w przyszłości ;-)

[EDIT]

Jednak jest nadzieja na serwer dedykowany, więc nie mając już żadnych limitów wykonywania się skyptu, możnaby puścić jeden skrypt php, który co sekundę sprawdzałby, czy są do wygenerowania jakieś akcje - tylko czy taki niekończący się skrypt nie zawiedzie? Oczywiście wtedy set_time_limit()em bym wydłużał jego limit czasowy tak, aby się nie skończył. Praktykował ktoś coś takiego? :-) Albo ostatecznie co minute odpalać crona, który będzie się wykonywał co sekundę przez minutę, ale to na to samo wyjdzie.

Tyle że w tym przypadku przy nawet drobnej awarii serwera skrypt by się zatrzymał, i żaden mecz nie rozgrywał :/ Więc chyba pokombinuję połączyć crony ze sleep(1) :-)
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.