Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odświeżanie danych co 1 sekundę
Forum PHP.pl > Forum > PHP
tehaha
Witam,
tworzę skrypt gry gdzie konieczne jest odświeżanie danych co 1s, zastanawiam się nad najbardziej wydajnym sposobem rozwiązania tego problemu, generalnie wymyśliłem 3 opcje:

1. wysyłanie zapytania do bazy przy pomocy skryptu php odpalanego przez jquery/ajax
2. wysyłanie zapytania do bazy dla wszystkich aktywnych rozgrywek przy pomocy CRON->zapis zserializowanej tablicy do pliku .txt ->odczyt pliku przy pomocy skryptu php odpalanego przez jquery/ajax
3. wysyłanie zapytania do bazy dla wszystkich rozgrywek przy pomocy CRON -> zapis do pliku xml -> parsowanie pliku przy pomocy jquery

Pierwszą opcję odrzuciłem ponieważ obawiam się o problemy wydajnościowe przy większej liczbie użytkowników grających jednocześnie.

Najbardziej odpowiednim wyborem wydaję mi się opcja nr 3, ponieważ przetwarzanie pliku odbywa się po stronie przeglądarki i nie obciąży to serwera. Jednak chciałbym prosić o opinię bardziej doświadczonych osób, ponieważ z plikami xml mam niewielkie doświadczenie. Nie proszę o żaden kod a jedynie o opinie odnośnie wydajności rozwiązań przy dużej liczbie użytkowników.

Pozdrawiam i dziękuję za wszelkie wskazówki
Wicepsik
Napisz co takiego w grze potrzebujesz odświeżać co sekundę? Może inaczej będzie można rozwiązać problem.
bim2
Ogólnie 1 opcja jest ok, jeśli dołożysz do tego memcache. Najlepiej połączona z 2 opcja, tylko miast pliku .txt użyj memcache. smile.gif

Ja mam co 200ms w grze odwołanie i memcache ale nie mam jak tego przetesować obecnie dla dużej ilości graczy.
tehaha
generalnie chodzi o różne dane gracza, które zmieniają się w trakcie rozgrywki poprzez interakcje innych graczy i wpływają na jego możliwe opcje tak więc gracz musi na bieżąco obserwować zmiany.

@bim2
czy chodzi Ci o coś takiego jak tutaj? http://www.varlog.pl/2010/04/praktyczne-wy...-memcached-php/ , czyli żeby wrzucać wynik zapytania do memcache na 1s? Bo rzecz w tym, że te dane będą się dość często zmieniały i muszą być na bieżąco aktualizowane
bim2
Nie, tak jak mówiłeś z txt. W cronie coś sobie tworzysz, wrzucasz do memcache a potem odpytujesz co 1 sec php, który zwraca wynik z memcache. smile.gif Na ramie szybciej bedzie trawała operacji niż na dysku.
tehaha
Twoje rozwiązanie brzmi bardzo zachęcająco:) dzięki za sugestie, spróbuję tak to zrobić
bim2
Dla przykładu, ja mam możliwość oglądania innych graczy. Aby nie przeciążać bazy jak się ruszysz to wysyłąm pozycje (x,y) i zapisuje ją do memcache (każdego gracza). Przy zapisie odrazu zwracam pozycje innych graczy odczytane z memcache. Dodatkowo czas życia dałem 5 sec, więc przestój gracza (lag) może wynieś max 5 sec.
bartg
Tylko co jakiś czas musisz zrzucić wszystko do pliku, bo jak memcache siądzie to dane znikną biggrin.gif
tehaha
Cytat(bartg @ 17.12.2010, 23:13:31 ) *
Tylko co jakiś czas musisz zrzucić wszystko do pliku, bo jak memcache siądzie to dane znikną biggrin.gif


Dane będą aktualizowane w bazie danych, wiec to nie grozi, memcache posłuży do trzymania aktualnych danych, które będą pobierane z bazy przez skrypt odpalany CRON'em i zapisywane do memcache, dzięki temu użytkownicy nie będą co 1s wysyłać zapytania do bazy a jedynie do memcache i to teoretycznie powinno być wydajne:)
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.