[mysql] licznik aktywnych użytkowników w grze


(kurzel131) #1

Witam, chciałbym dodać na stronę serwera licznik wejść. Jednak nie taki jak ma to miejsce w 90% przypadków, że zlicza podłączone konta, tylko by zliczało podłączone IP (pokazywało +1 wejść w momencie wejścia danego IP na serwerze i -1, gdy dane IP wyjdzie z serwera). O co dokładnie chodzi?, kiedyś każdy grał aktywnie na swoim jednym koncie i rzeczywiście, gdy na serwerze pokazywało, że jest 200 osób online, to tyle rzeczywiście było. Dziś niestety stary licznik zostanie oszukany, bo każdy podłączy kilka kont jednocześnie, ustawi gdzieś party i pójdzie choćby na piwo. Efekt: pokazuje nawet 1000 online, ale gra ze 30 osób. Języka nie znam, ale w php miałem coś podobnego.

https://wklej.to/24nH7

Tutaj pobierało IP do pliku, jednak nie znikało po wyjściu, ale to miało trochę inne zastosowanie. Wiem, że coś takiego jest możliwe nawet dynamicznie bez żadnych opóźnień.


(Fizyda) #2

W jaki sposób to niby ma naprawić sytuację że jeśli ktoś pójdzie na piwo to go nie będzie zliczało?
Co z osobami które mają jeden wspólny publiczny adres IP i nawet się nie znają i nie wiedzą o sobie?

O co w ogóle chodzi? Tak to wytłumaczyłeś że nie wiadomo co chcesz ty osiągnąć.


(kurzel131) #3

Pisałem, o sytuacji, że teraz jest tak, że logujesz się z 5 kont jednocześnie i sam robisz na serwerze 5 online, i tyle też pokazuje na liczniku, bo zlicza podłączone konta. Jakby zliczało po ip, to możesz podłączyć 10 kont, a będzie pokazywało jako jedno online*. Można podczas gry wyjść na piwo, czy do dziewczyny, ale jak nie będzie aktywnego party to może ono paść, bo zablokuje automatyzacje gry. A nie zliczy danego gracza, jeżeli go samo rozłączy z serwerem, dopóki w jakiś sposób będzie w grze, to będzie go zliczało, a jak wyjdzie z gry albo go rozłączy, to nie będzie zliczało go jako dodatkowej osoby online.

*Oczywiście są inne komputery, zmienne ip, i publiczne ip.

a). Z innymi komputerami nic nie zrobię, to czy ktoś jest aktywny wyjdzie w praniu
b). Ze zmiennym ip chyba będzie problem, ale dużo osób chyba nie ma zmiennego. Jak to wgl działa sam sobie zmieniasz ip z przedziału czy samo się zmienia co jakiś czas?
c). W kwestii publiczny/prywatny adres wiem tyle, że publiczny jest na jakimś vps a prywatny to twój domowy, w takim wypadku by pokazywało mniej online, niż jest w rzeczywistości, chyba lepiej niż by pokazywało 1000 online, a aktywnych jest 15 osób.

PS mowa jest o serwerze do gry MMO


(Fizyda) #4

Odpiszę tylko na to co udało mi się zrozumieć.

Nie widzę problemu jaki miałby spowodować zmienny adres IP, co do ilości jest to większość prywatnych użytkowników.

Nie wiem jaki to ma związek z tematem i nie do końca o to chodzi, a przynajmniej nie do końca poprawnie to opisałeś.

Powiedz mi w czym Ci przeszkadzają teoretycznie zawyżone statystyki bo zazwyczaj ludzie kombinują co by tu zrobić by je poprawić, a nie pogorszyć. Obecne statystyki są poprawne ponieważ dotyczą one aktywnych kont, więc są w porządku. To co chcesz wprowadzić nie będą to poprawne statystyki ani prawdziwe ponieważ będą one dotyczyły tylko połączonych adresów IP z serwerem - czyli nic właściwie nie będą mówiły ponieważ nie można traktować adres IP jako jednej konkretnej osoby/użytkownika/gracza.

Napisz czego właściwie oczekujesz poza samą dyskusją na ten temat bo nie podałeś żadnych informacji, ani specyfikacji gry, ani żadnej jej dokumentacji. Zero informacji skąd i jak mają być pobierane dane, ani w jakiej technologi. Jedyne czego można się domyślić to że będzie trochę kodu prawdopodobnie w php ponieważ wspominałeś o jakimś liczniku na stronę.


(kurzel131) #5

Może faktycznie się nie przygotowałem do tematu.

Przykładowa grafika z gry http://uploadcdn.webzen.com/Files/Clara/portal-inquiry-notice/2012/03/21/20120321A05FBIDZCHWFCGZH.jpg

Strona by pobierała dane z bazy danych serwera, tak jak to robi obecnie z rankingiem najlepszych graczy itd.

1 odczytany adres ip byłby pokazany jako jedna osoba online na stronie serwera w jakimś buttonie, chodzi mi o to, że w sytuacji, gdy 10 osób o stałych ip się zaloguje do gry na 3 kontach, każda to będzie na stronie serwera pokazywało 10 osób online, a nie 30.

Co do ip w podpunktach b). i c). Opisałem tyle, ile wiem.

Zawyżone statystyki przeszkadzają w tym, że serwer PVP w starym stylu, jaki chcę stworzyć, słabo się trzyma w Polsce. I poza porządną reklamą z faktu, że jest czymś nowym, a nie 50 reedycją czegoś, co już było, musi przyciągnąć graczy. Czymś więcej niż dobrą konfiguracją. Jeżeli grasz w MMO i szukasz dobrego serwera, na którym chcesz się rozerwać, to znajdziesz aktywny serwer, a nie wymarły (teoretyczne 80 online lepiej wygląda niż zawyżone 1600 online).

Fragment kodu php podałem w pierwszym poście, ale podobno w mysql da się coś takiego wprowadzić, by dane były przesyłane na bieżąco, a nie co jakiś czas aktualizowane.

Specyfikacja to Pentium II 700MHz, 512MB RAM, 32MB VGA, wyższe nie będą jednak dla zabytkowych komputerów i graczy chcący na nich uruchomić kilka klientów będzie specjalny path niwelujący błyszczenie, i usuwający elementy takie jak mgła czy bąbelki.


(Fizyda) #6

Dobrze, a jak jest struktura bazy danych? A najlepiej struktura i nazwa tabeli gdzie gra ma informacje o sesjach, oraz jaka to baza danych.


(eskimosek) #7

Unikalne podłączone ip można sprawdzić takim poleceniem:
netstat -ntu | grep -v 127.0.0.1| awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n | wc -l


(Fizyda) #8

Ale sprawdzisz to dla wszystkich usług podłączonych do serwera vps/dedyk, a nie do konkretnej aplikacji. Dodatkowo musisz mieć możliwość wykonywania poleceń systemowych co w przypadku wyświetlania informacji na stronie czyli serwera WWW nie jest najbezpieczniejszym i raczej się blokuje w PHP możliwość wywołań systemowych.


(eskimosek) #9

nie trzeba tego polecenia wywoływać w php tylko np. zrobić skrypt który wywołuje to polecenie i przekierowuje wynik do pliku i dać wykonywanie w cron co 1 minute,a w php zrobić tylko czytanie zawartości tego pliku.W mysql tego raczej nie zrobi chyba że mu zapisuje w bazie czy konto jest podłączone czy nie to już zależy od silnika gry,ale raczej taki parametr nie jest zapisywany bo to by obciążało baze w takiej grze jak MMo przy dużej ilości graczy by żle wpływało na wydajność.Jak to serwer gry MMo to chyba musi mieć do tego jakiegoś vps czy dedyka.


(Fizyda) #10

Na razie zbyt mało wiadomo by można było coś powiedzieć, ale skoro obecnie ma informacje z bazy danych o zalogowanych użytkownikach to możliwe że jest tam też adres IP. Szczerze mówiąc takie informacje to zerowe obciążenie dla bazy danych czy serwera.


(kurzel131) #11

Mam dobry komputer, ale ze względu na zagrożenia dos/ddos serwer i strony stoją na vps.

@Fizyda ciężko mi odpowiedzieć na twój post z dziś o 0900, stronę mi instalowała osoba odpowiedzialna za vps, na którym mam strony i serwer, sama strona jest tylko zainstalowana dodałbym tylko ten licznik, część rzeczy bym usunął i zmienił grafikę. Wysłałem jej twoje zapytania, jak będzie miała chwile czasu to da mi znać a ja dam znać tu.