Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Zasada działania serwera


Rekomendowane odpowiedzi

Opublikowano

Zastanawiam się jak działają serwery gier multiplayer (Klient - Serwer). Chodzi mi o zasadę działania i w jaki sposób taki serwer się tworzy (c++). Od razu mówię że nie mam zamiaru robić gry multiplayer etc. tylko chcę dowiedzieć się jak to jest zrobione, na necie nie ma tego czego szukam lub może nie wiem czego dokładnie szukać :/ 

 

Cześć...

Opublikowano

Najwidoczniej nie tego szukasz co trzeba. Kwestia komunikacji klient <-> serwer odbywa się, najczęściej, za pośrednictwem dwóch protokołów - TCP/IP lub UDP/IP.

Pomiędzy tymi dwoma protokołami są niewielkie różnice, najważniejszą jest na pewno ta, że TCP jest protokołem połączeniowym (wymaga nawiązanie połączenia) zaś

UDP jest bezpołączeniowy (paczki wysyłasz w każdym momencie).

 

Od strony programowej nie jest to jakoś bardzo skomplikowane. W wersjach rodem z C (czysty winsock czy unixowe sockety, które programuje się, de facto, tak samo)

można bardzo ładnie zaobserwować kolejne czynności, jakie są wykonywane do uruchomienia serwera czy nawiązania połączenia.

 

Serwer TCP:

Na początku aplikacja prosi system o gniazdo sieciowe i jeśli zostanie jej nadane, to może zbindować na niego adres, z którego będzie nasłuchiwać. Następnie

aplikacja przełącza gniazdo w tryb nasłuchiwania (listen) i już może akceptować połączenia (accept).

 

Klient TCP:

Tak jak w przypadku serwera klient też musi otrzymać gniazdo, z którego będzie nawiązywać połączenie z serwerem. Tu sprawa jest krótsza, bo zaraz po otzymaniu

gniazda, może wykonać połączenie (connect) z wybranym serwerem (bez bindowania aczkolwiek nikt nie zabroni). Po nawiązaniu połączenia można rozpocząć wymianę danych.

 

Przykład klienta i serwera z użyciem winsock2 znajdziesz tutaj.

 

Trochę ubogo ale temat jest rozległy. Poza tym dzisiaj używa się gotowych wrapperów, w których wystarczy stworzyć obiekt serwera czy klienta, zaprogramować

odpowiednie eventy i wszystko działa jak należy. Aczkolwiek warto poznać co się dzieje niżej a nawet jeszcze niżej oraz jakie są rozwiązania zwiększania wydajności

aplikacji serwerowych (np. async IO).

YOU MUST DIE

- Ganon, Koridai

Opublikowano

Dzięki wielkie za odpowiedź. Teraz już będę wiedział czego dokładnie szukać, więc myślę że ta odpowiedź jest zadowalająca :D

Cześć...

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...