Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [AJAX][PHP][MySQL] Czat obrazkowy, optymalizacja ilości wysyłanych danych
Popek231
post 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) 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..


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
Rysh
post 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


--------------------
Go to the top of the page
+Quote Post
Popek231
post 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 :)
Go to the top of the page
+Quote Post
Rysh
post 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%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Popek231
post 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" smile.gif
Dzięki:)


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
Rysh
post 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%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Popek231
post 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ż biggrin.gif
Odpowiednia klasa wszystko załatwi tak, że będzie działało jak zwykła DB:)


--------------------
Pomogłem? Wiesz co kliknąć w odpowiednim miejscu :)
Go to the top of the page
+Quote Post
Rysh
post 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%)
-----


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.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.05.2024 - 09:15