Wielowątkowy serwer - jak się do tego zabrać?
Ostatnio zmodyfikowano 2011-11-24 09:44
wizardus Temat założony przez niniejszego użytkownika |
Wielowątkowy serwer - jak się do tego zabrać? » 2011-11-24 09:16:45 Witajcie!
Umiem coś tam w C++ (nie powiem, że umiem dobrze, bo wiadomo, że zawsze coś sie znajdzie). Tworzę grę w SDL (swoją drogą tworzenie własnych kontrolek w SDL to tragedia, no ale jakoś sobie radzę). Mam pytanie natury technicznej.
Przyjmijmy, że do serwera podpięte jest 100 osób. Każda para walczy ze sobą (a la Tibia, tylko bardziej złożone, combosy itp.). Mamy 50 par, które asynchronicznie wysyłają do serwera dane nt. kombinacji ciosów itp. I teraz nachodzi mnie pytanie: Jak zrobić, aby serwer nadążał z odpalaniem funkcji. Tzn, czy jest możliwość, aby serwer w tym samym momencie obsługiwał kilka funkcji? Czy jest to w ogóle możliwe w C++? Słyszałem o obsłudze wielowątkowości, może to jest wyjście ? No i dodajmy do tego opcję chodzenia. Mianowicie mój patent.
Zakładając, że mapa jest kafelkowa, każde przemieszczenie to przemieszczenie o kafelek. Aby animacja nastąpiła w tym samym czasie ja to widzę tak:
Klient 1 -> Wysyłanie informacji o przemieszczeniu do serwera -> Serwer -> Przetwarzanie informacji o przemieszczeniu.
Zakładając że każdy kafelek ma 50 px. Na jedno przejście wykonywana jest animacja złożona powiedzmy z 5 klatek. w tym momencie serwer odpala interwał ( w zależności od prędkości gracza), który uaktualnia w bazie danych pozycję to jest nie pokazuje że obecna pozycja jest o klatkę dalej tylko zwiększa o 1/5 klatki co np 1/5 sekundy i uaktualnia do tego, która klatka animacji jest obecnie wymagana.
Serwer -> Przetwarzanie informacji o przemieszczeniu. -> Baza danych
I to jest jeden "wątek". Drugi w tym czasie musiałby sprawdzać czy ktoś walczy, zbiera, itd itd itd...
Mapa generuje sie dynamicznie u klienta, z tym nie ma problemu. Pytanie natomiast jest takie:
Jak to rozwiązać ? Prawdopodobnie brakuje mi wiedzy. Z bazą mysql łączę się przy pomocy mysql.h i własnej klasy do obsługi mysql.
Proszę o pomoc, wskazówki. Czego będzie trzeba to się nauczę :] Bo programowanie to łatwa rzecz, tylko trzeba chcieć.
P.S Oczywiście do obsługi połączenia klient - serwer używał będę winsocka. |
|
DejaVu |
» 2011-11-24 09:19:43 Zrób najpierw chata na wiele osób. Skoro piszesz pytając się 'czy wielowątkowość będzie potrzebna' to znaczy, że jeszcze kompletnie nic nie robiłeś z siecią. |
|
wizardus Temat założony przez niniejszego użytkownika |
» 2011-11-24 09:26:49 @DeJavu
Wybacz moją niekompentencje i brak umiejętności ale masz rację :) Nic kompletnie nie robiłem z siecią. Dzięki za wskazówkę. I jeszcze jedno pytanie:
1. Czy uważasz WinSock'a za dobry pomysł ? 2. Czy polecasz jakąś lekturę oprócz "Beej's Guide to Network Programming" ? I Msdn'a oczywiście ? |
|
DejaVu |
» 2011-11-24 09:36:01 Nie ma niczego innego do komunikacji - nawet jeżeli są jakieś inne biblioteki to wszystkie opierają się o winsocka (mowa o systemie Windows).
/edit:
Natomiast co do kursu - ja się uczyłem z Kurs WinSock, C++ i dlatego go zamieściłem. O ile podstawy są w miarę przystępnie wyjaśnione o tyle w niektórych częściach trzeba przysiąść intensywnie do MSDN-a i przeanalizować jak funkcje faktycznie działają by w pełni zrozumieć jak te klocki powinno się składać do kupy. |
|
wizardus Temat założony przez niniejszego użytkownika |
» 2011-11-24 09:44:22 Dzięki wielkie :] Wiedziałem, że jeśli Ty jesteś On-Line to na pewno poratujesz :] |
|
« 1 » |