Uwaga: pytanie dotyczy sieci, a nie gier. Używam StarCraft jedynie jako przykładu.
Gra StarCraft (nie StarCraft 2) obsługuje grę online. Jedna osoba hostuje, a inne osoby dołączają. Jeśli gospodarz odejdzie podczas gry, gra może być kontynuowana bez niego. Jak to działa?
Rozważ następujący scenariusz:
- Hostuję 3 w porównaniu z 3. Pamiętaj, że aby ludzie mogli się przyłączyć, mój router musi być skonfigurowany do przesyłania dalej 6112, TCP i UDP (patrz Wsparcie Blizzarda ).
- Pięć osób dołącza. Wszyscy (łącznie ze mną) stoją za routerem. Zaczynam grę.
- Po trzech minutach gry do mojej bazy wlewa się około dwudziestu fanatyków. Nikt mi nie pomaga.
- Moja baza została wyeliminowana, więc wychodzę (gra nie daje wyboru).
- Gra trwa bez gospodarza (w drużynie gospodarzy pozostało dwóch graczy).
W jaki sposób pozostałych pięciu klientów (którzy nie potrzebowali przekierowania 6112) pozostają w kontakcie?
Jeśli dobrze rozumiem: jeśli dwa programy chcą ze sobą rozmawiać, jeden z nich musi być „serwerem” i nasłuchiwać połączeń na porcie, a drugi musi być „klientem” i inicjować żądanie połączenia na tym Port. Nie mogą po prostu zacząć przesyłać sobie pakietów (a ja nawet nie wiem, jak by to zrobili, jeśli oba są za routerami).
Ktoś hostujący grę jest serwerem, a dołączającymi do niej są klienci. Łatwo jest zobaczyć, jak klienci mogą zacząć komunikować się z serwerem. Nie rozumiem: w jaki sposób klienci zaczynają komunikować się ze sobą bez przechodzenia przez serwer? Czy protokół internetowy umożliwia serwerowi inicjowanie połączeń między klientami?
Jest całkiem możliwe, że w przypadku StarCraft ruch w grach przechodzi przez serwery Battle.net. StarCraft utrzymuje połączenie z Battle.net podczas gier (wiadomości od znajomych itp.). Wątpię jednak, aby ruch w nim przechodził, ponieważ jeśli tak, to dlaczego hosty musiałyby przesyłać 6112?
Moje pytanie brzmi: czy serwer z wieloma podłączonymi klientami może inicjować połączenia między nimi?
źródło
I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).
Najwyraźniej jest to potrzebne do uruchomienia gry, aby użytkownicy mogli Cię znaleźć, ale nie muszą pozostawać w kontakcie.Odpowiedzi:
To brzmi jak dziurkowanie UDP
W tym przykładzie jesteś S. Twoimi przeciwnikami są A i B. Kiedy zostaniesz wyrzucony z gry, twoi przeciwnicy mogą kontynuować grę, ponieważ wynegocjowali połączenie ze sobą, kiedy po raz pierwszy się z tobą połączili.
źródło
Jeśli dwa programy chcą ze sobą rozmawiać, jeden nie musi być serwerem, a drugi klientem. To jeden model sieci, ale nie jedyny. Innym bardzo powszechnym modelem jest model peer-to-peer , w którym każdy jest zarówno klientem, jak i serwerem, a każdy może z każdym rozmawiać. Nie wiem zbyt wiele o wewnętrznych elementach sieciowych do gry wieloosobowej Starcraft, ale zgaduję, że najprawdopodobniej osiąga to, co opisałeś, używając modelu peer-to-peer.
źródło