Autor Wątek: Gra Karciana - Serwer  (Przeczytany 880 razy)

Offline Byron

  • Użytkownik

# Lipiec 06, 2009, 10:38:11
Witam.

Witam pisze sobie serwerek do obslugi gry karcianej. No i mam mala zagowzdke. Wymyslilem sobie ze klienci beda sie laczyli z serwerem , beda wrzucani na liste i gdy dwoch klientow o podobnych preferencjach co do rodzaju gry znajdzie sie na takiej liscie , bedzie tworzona dla nich "nowa gra".Ewentualnie klient laczacy sie z serwerem bedzie mial mozliwosc stworzenia nowej gry , do ktorej drugi klient bedzie mogl sie dolaczyc. Czyli poprostu serwer bedzie posredniczyl w ich komunikacji miedzy soba. Zastanawiam sie teraz jak to lepiej zrobic. Czy dla kazdej takiej gry tworzyc nowy watek , ktory bedzie obslugiwal to polaczenie pomiedzy tymi klientami , czy poprostu zrobic liste takich polaczen i obslgiwac je w jednym watku. A moze jestem niedouczony (a pewnie tak jest :P ) i da sie to zrobic lepiej , prosciej i w ogole :) Ahh i wszytsko to pisze w c++ / Qt

Pozdrawiam

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Lipiec 06, 2009, 11:07:05
Możesz zrobić nowy wątek - nie tyle, żeby się nie dało na jednym, ale na przyszłość będzie bardziej skalowalne, a robiąc wielowątkowo zupełnie nic nie tracisz. Oczywiście pod warunkiem, że to będzie wątek, a nie proces (czyli np. fork() odpada). :)

Offline Kosz85

  • Użytkownik

# Lipiec 09, 2009, 01:32:49
Ogólnie jednym z wydajniejszych sposobów obsługi jest pula wątków, gdzie jeden wątek obsługiwałby kilka stołów. Zapobiega to sytuacji w której większość czasu obliczeniowego zajmuje przełączanie wątków. Powiedzmy sobie szczerze, że gra karciana nie wymaga przesyłania niesamowitych ilości danych pomiędzy graczami ;) Jeśli będziesz mieć 1000 gier i stworzysz do nich 1000 wątków, a koszt przełączania pomiędzy wątkami jest n (w cyklach), to masz zmarnowanych około 1000n cykli procesora. Biorąc pod uwagę, że dane od graczy w karciankach dostajesz rzadko, to marnujesz te cykle, bo żadnych danych nie dostajesz. W tym momencie lepiej zrobić 10 wątków, po 100 gier co daje ci 10n straconych cykli, czyli 100 razy lepiej :) A opóźnień w większości nie zauważysz.
Wrzucenie 1000 gier do jednego wątku też nie jest rozwiązaniem, ze względu na czas oczekiwania na obsługę żądania, no i nie wykorzystujesz możliwości wieloprocesorowych maszyn.
Pule wątków, to najpopularniejsze rozwiązanie od serwerów http, po serwery gier.

Offline Byron

  • Użytkownik

# Lipiec 09, 2009, 10:26:26
Dzieki za odpowiedzi :)

Rzeczywiscie pula watkow(wnioskujac po tym co napisales) wydaje sie rozsadnym rozwiazaniem, zwlaszcza ze to ma byc gra 1 vs. 1, wiec danych przesylanych za wiele nie bedzie. Nie przewiduje tez aby gralo w to wiecej niz 10 osob naraz, ale chcialbym to napisac tak, aby sprawdzalo sie przy zarowno 10 osobach jak i 10000 osob grajacych jednoczesnie.

No nic pogooglam troche, moze dowiem sie czegos na ten temat. No chyba ze znacie jakas dobra literature/tutorial na temat pisania wielowatkowych aplikacji sieciowych.

Pozdrawiam