Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [AJAX][PHP][MySQL] Czat obrazkowy, optymalizacja ilości wysyłanych danych

Napisany przez: Popek231 14.03.2016, 20:56:46

Hejka,
tworzę grę online - czat obrazkowy.
Takie coś: sterowanie postaciami, pisanie na czacie na żywo, wiadomości nad głową.

I mam pytanie, bo to jest oparte o bazę danych MySQL(i) i zastanawia mnie kwestia optymalizacji...

1)
Wysyłanie informacji o statusie online w AJAX co 1 sekundę zapisywane do db,
potem sprawdzanie kto jest online przez coś w stylu SELECT ... WHERE ostatniczas < 3 SEKUND
(ten czas to od 1970 roku w ms, wiec będzie dało się sprawdzić)
tylko czy to jest ok rozwiązanie?

2)
Podczas gry, myślę (tak optymistycznie), że MAX będzie 150 osób.
Więc może stworzyć 2 tabele, jedna z osobami OFFLINE, a druga z ONLINE
i kto będzie miał czas ostatniego zameldowania z tabeli ONLINE wiekszy niż 3 sekundy, to przenieść do OFFLINE, potem przenieść do ONLINE..
bo przeglądanie tabeli np. 1500 rekordowej, będzie dużo czasu zajmowało...

3)
Żeby zapobiec multi-logowaniu (multi-oknom), jeśli ostatni czas meldowania będzie mniejszy niż 1sekunda, no to wywali to okno z gry - dobry pomysł?

4)
wyświetlanie w canvas (całkiem przyjemne) i obsługa tego w js (bo jakby inaczej) smile.gif

5)
Ostatnio przygotowałem system wiadomości, też w ajax
i dodając to do gry, taki dodatek: co 30 sekund sprawdza w bazie, czy są nowe wiadomości przez przeczytana=0 i wyświetla info (nie ma nowych, są nowe) - więc co 30 sekund zapytanie jest wykonywane

Czy to jest dobre 'myślenie' jak na projektowanie gry online?
(innych kwestii jeszcze nie przemyślałem)

@ref
Naprawdę? nikt nie umie udzielić odpowiedzi na te łatwe pytania?
nie ma dużo czytania, tylko są porobione nowe linie, przez co wygląda, że dużo, tyle - nie wymagam wielkiej odpowiedzi, chcę tylko prostą odpowiedź kogoś, kto się zna..

Napisany przez: Rysh 16.03.2016, 14:00:10

1. Zabijesz serwer takimi zapytaniami.
2. Bardzo zły pomysł, wystarczy dodatkowa kolumna w tabeli użytkownika lastseen z timestampem, jeśli chcesz pokazać graczy online pobierasz rekordy z ostatniej minuty czyli time() - 60, będzie Ci pokazywało również tych co się wylogowali np. 20 s temu, ale jak pomyślisz to i znajdziesz na to rozwiązanie.
3. jak w 1, zaryjesz bazę - mocno przeszkadza logowanie z kilku okien?
4.
5. jeśli wysyłasz ajax'em zapytanie do która zwraca Ci true/false lub jakiś JSON to tak, jest to dobre rozwiązanie - o ile nie wczytujesz całej strony żeby zwrócić tylko to czy są nowe wiadomości.

Napisany przez: Popek231 16.03.2016, 23:12:02

A baza danych tekstowa spełniłaby oczekiwania?
Odczytanie pliku jest dużo szybsze niż zapytanie MySQLi, miałoby się pod ręką dane z planszami i z aktualnymi czasami, a reszta (loginy, hasła i inne mniej używane), byłyby po stronie MySQLi...

Napisany przez: Rysh 16.03.2016, 23:36:32

Cytat(Popek231 @ 16.03.2016, 23:12:02 ) *
A baza danych tekstowa spełniłaby oczekiwania?
Odczytanie pliku jest dużo szybsze niż zapytanie MySQLi, miałoby się pod ręką dane z planszami i z aktualnymi czasami, a reszta (loginy, hasła i inne mniej używane), byłyby po stronie MySQLi...

Pewnie że jest szybsza, bo w końcu baza mysql to również plik gdzieś na dysku.

Napisany przez: Popek231 17.03.2016, 00:27:38

Okej, to zastosuję "plikową bazę danych" smile.gif
Dzięki:)

Napisany przez: Rysh 17.03.2016, 08:17:51

Cytat(Popek231 @ 17.03.2016, 00:27:38 ) *
Okej, to zastosuję "plikową bazę danych" smile.gif
Dzięki:)

Szybsza nie znaczy lepsza, preferowałbym mimo wszystko normalną bazę danych.

Napisany przez: Popek231 17.03.2016, 18:56:10

W tym przypadku szybkość to priorytet, nie chce zabić DB, a pliki się nie posypią przecież biggrin.gif
Odpowiednia klasa wszystko załatwi tak, że będzie działało jak zwykła DB:)

Napisany przez: Rysh 17.03.2016, 22:37:31

Cytat(Popek231 @ 17.03.2016, 18:56:10 ) *
W tym przypadku szybkość to priorytet, nie chce zabić DB, a pliki się nie posypią przecież biggrin.gif
Odpowiednia klasa wszystko załatwi tak, że będzie działało jak zwykła DB:)

Jeśli chcesz wynajdywać koło na nowo to powodzenia smile.gif Poczytaj w internecie o tym, jest trochę materiału na ten temat.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)