![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 575 Pomógł: 299 Dołączył: 26.03.2009 Ostrzeżenie: (20%) ![]() ![]() |
Napisz co takiego w grze potrzebujesz odświeżać co sekundę? Może inaczej będzie można rozwiązać problem.
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
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.
![]() Ja mam co 200ms w grze odwołanie i memcache ale nie mam jak tego przetesować obecnie dla dużej ilości graczy. -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
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.
![]() -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Twoje rozwiązanie brzmi bardzo zachęcająco:) dzięki za sugestie, spróbuję tak to zrobić
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 873 Pomógł: 152 Dołączył: 9.04.2006 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
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.
-------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 226 Pomógł: 25 Dołączył: 4.07.2007 Skąd: Berlin Ostrzeżenie: (0%) ![]() ![]() |
Tylko co jakiś czas musisz zrzucić wszystko do pliku, bo jak memcache siądzie to dane znikną
![]() -------------------- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) ![]() ![]() |
Tylko co jakiś czas musisz zrzucić wszystko do pliku, bo jak memcache siądzie to dane znikną ![]() 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:) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 01:39 |