[AJAX][PHP][MySQL] Czat obrazkowy, optymalizacja ilości wysyłanych danych |
[AJAX][PHP][MySQL] Czat obrazkowy, optymalizacja ilości wysyłanych danych |
14.03.2016, 20:56:46
Post
#1
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 30.03.2012 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
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) 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.. -------------------- Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
|
|
|
16.03.2016, 14:00:10
Post
#2
|
|
Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) |
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. Ten post edytował Rysh 16.03.2016, 14:02:33 -------------------- |
|
|
16.03.2016, 23:12:02
Post
#3
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 30.03.2012 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
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... -------------------- Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
|
|
|
16.03.2016, 23:36:32
Post
#4
|
|
Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) |
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. -------------------- |
|
|
17.03.2016, 00:27:38
Post
#5
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 30.03.2012 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
Okej, to zastosuję "plikową bazę danych"
Dzięki:) -------------------- Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
|
|
|
17.03.2016, 08:17:51
Post
#6
|
|
Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) |
Okej, to zastosuję "plikową bazę danych" Dzięki:) Szybsza nie znaczy lepsza, preferowałbym mimo wszystko normalną bazę danych. -------------------- |
|
|
17.03.2016, 18:56:10
Post
#7
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 2 Dołączył: 30.03.2012 Skąd: Bielsko-Biała Ostrzeżenie: (0%) |
W tym przypadku szybkość to priorytet, nie chce zabić DB, a pliki się nie posypią przecież
Odpowiednia klasa wszystko załatwi tak, że będzie działało jak zwykła DB:) -------------------- Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
|
|
|
17.03.2016, 22:37:31
Post
#8
|
|
Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) |
W tym przypadku szybkość to priorytet, nie chce zabić DB, a pliki się nie posypią przecież 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 Poczytaj w internecie o tym, jest trochę materiału na ten temat. -------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 25.05.2024 - 14:39 |