Jak mogę stworzyć grę wieloosobową p2p? Chciałbym mieć grę wieloosobową bez serwera. Ale w jaki sposób wszyscy klienci znają się?
Dlaczego protokół p2p jest tak sławny w przesyłaniu plików, ale nie w grach dla wielu graczy?
networking
multiplayer
peer-to-peer
Tuomas Hietanen
źródło
źródło
Odpowiedzi:
Gry typu peer to peer zazwyczaj nadal mają hosta gier. Jest to gospodarz gry, który publikuje grę na głównej liście gier i akceptuje nowe połączenia. Ilekroć gospodarz gry akceptuje nowego klienta do gry, powiadamia wszystkich obecnych klientów o nowym kliencie, aby mogli upewnić się, że łączą się z nowym klientem.
Najprostszym sposobem na wdrożenie p2p jest lobby. Wszyscy klienci łączą się z hostem w lobby (lub pokoju rozmów). Gdy gospodarz jest gotowy, gracz naciska przycisk Start i wszyscy wchodzą do gry w tym samym czasie (powszechnie stosowane w grach strategicznych). Bardziej złożonym podejściem jest użycie „drop-in drop-out”, w którym gracze mogą dołączyć i opuścić środkową fazę gry, jednak jest to o wiele bardziej złożone wdrożenie w grze p2p i wymaga funkcji o nazwie migracja hosta.
Wiele gier korzysta z sieci peer-to-peer, w tym większość gier strategicznych, sportowych i kierowców. Prawie wszystkie gry Xbox360 i PS3 korzystają z sieci p2p. Architektura klient-serwer jest najczęściej używana w strzelankach FPS lub grach MMO.
Klient-Serwer jest generalnie łatwiejszy do wdrożenia, ponieważ tylko 1 komputer nie zna całego stanu gry, klienci są w zasadzie tylko rendererami z pewnymi przewidywaniami, aby wszystko wyglądało gładko.
Kiedy budujesz silnik p2p, wszyscy klienci potrzebują pełnego stanu świata gry i wszyscy muszą być zsynchronizowani.
Aby uzyskać więcej informacji o architekturze p2p i architekturze klient-serwer, sugeruję przeczytanie następującego artykułu: Co każdy programista musi wiedzieć o grach sieciowych .
A jeśli dopiero zaczynasz pracę w sieci, sprawdź inne świetne artykuły na tej stronie. Glenn jest geniuszem sieciowym.
źródło
Istnieje wiele powodów, dla których p2p nie jest popularny w grach, głównie z powodu lagów. Wszyscy są tak powolni jak najwolniejszy gracz. Nie mówimy tu o przepustowości, ale o czasie pingowania.
p2p może przesyłać tony danych, ale robi to przy dość wysokim pingu, gry muszą przesyłać bardzo małe ilości danych, przy minimalnym czasie pingowania.
źródło
Istnieje kilka interesujących aspektów dotyczących systemów peer-to-peer i gier akcji. Próbowałem opublikować je jako komentarz na blogu Glenna Fiedlera, ale najwyraźniej nie lubi, gdy się go nie myli i zamiast tego wyciągnąłem cały artykuł. Jest w archiwum internetowym, na wypadek, gdybyś chciał go przeczytać.
Nie pozwolił komentarzowi przejść do trybu online, dlatego zacytuję go tutaj:
Wątek, do którego się odwołuję, można znaleźć na stronie http://www.devmaster.net/forums/showthread.php?t=14640 .
Myślę, że ktoś wspomniał o problemach zapory sieciowej w sieci peer-to-peer w jednym z wątków tego artykułu. Możliwym rozwiązaniem byłoby NAT-Punchthrough:
- NAT Punchthrough przegląd
- Komunikacja peer-to-peer Across Tłumaczy Network Address
Nie ma 100% wskaźnika sukcesu, dlatego powinieneś powiedzieć graczom, aby otworzyli port.
źródło
Dobrym przykładem gry typu „peer-to-peer” jest gra strategiczna w czasie rzeczywistym, taka jak Starcraft.
W grze, w której poruszają się setki jednostek / pocisków, nie jest praktyczne wielokrotne wysyłanie pozycji / stanów jednostek przez sieć do wszystkich innych graczy, więc jednym z rozwiązań jest, aby wszyscy gracze uruchomili (dokładnie taką samą) synchronizację.
Gdy jeden gracz wykonuje akcję, polecenie / polecenie („przestaw zerowanie na X, Y”) może zostać wysłane do wszystkich innych graczy, które zostaną wykonane we wszystkich przypadkach symulacji ułamek sekundy później.
W tej sytuacji, jeśli jakikolwiek gracz rozłączy się, gra może być kontynuowana - ponieważ nie ma potrzeby uruchamiania serwera / hosta, pozostali gracze mogą kontynuować.
Jednak utrzymywanie synchronizacji gier nie jest trywialne, musisz użyć ustalonego timepeptu dla aktualizacji logiki gry i musisz być bardzo ostrożny z użyciem i inicjowaniem generatorów liczb losowych, aby zapewnić, że symulacje nie będą się różnić!
źródło
Byłoby nieco nieuczciwe twierdzenie, że nie jest znane z gier, w których wykorzystuje się większość gier strategicznych czasu rzeczywistego (seria Star Craft, seria Command and Conquer) i wiele gier FPS (Call of Duty: Modern Warfare 2).
To, jak uczy się o grze, zależy od usługi dobierania / lobbingu, z której korzystasz lub którą tworzysz. Ale nawet gdy ktoś pozna grę, nadal może istnieć jeden lub więcej rówieśników, którzy są bardziej równi od innych. Rozważ przypadek 3 klientów, którzy chcą grać, jednego za otwartym nat, 2 za surowymi (zamkniętymi) kotami. Otwarty użytkownik może odbierać połączenia od pozostałych dwóch. Ale 2 ścisłe nie mogą łączyć się bezpośrednio ze sobą, będą wymagały otwartego nat do przekazywania pakietów. Jeśli z gry spadnie osoba z otwartymi kontaktami, albo trzeba będzie znaleźć inny przekaźnik, albo gra zostanie zakłócona.
źródło
możesz również sprawdzić Badumna (www.badumna.com), która twierdzi, że jest rozwiązaniem sieciowym typu peer-to-peer do gier online. Wydaje się, że synchronizuje stan gry w sposób rozproszony i zgodnie z ich witryną nadchodzi wersja Flash.
źródło
Prawdopodobnie chcesz uruchomić z jednym graczem (nazywamy go „Hostem”) jako serwer nieautorytatywny. Wszyscy inni gracze będą komunikować się z naszym gospodarzem, co robią, a gospodarz przekaże wiadomości innym graczom.
Prawdopodobnie chcesz również przekazać listę komputerów podłączonych do odtwarzacza hostingowego, aby w razie upuszczenia nowy host mógł zostać wybrany i rozpocząć komunikację z pozostałymi graczami.
Dokumentacja smartfoxserver może ci pomóc i / lub możesz chcieć użyć jej również w swojej grze. Po prostu umieścisz go w swojej grze klienckiej zamiast osobnego programu klienta i serwera.
źródło
Trochę mnie to interesuje. Mówisz, że istnieje wiele problemów z tworzeniem gry p2p zamiast klasycznego modelu klient-serwer. Ale jestem pewien, że p2p jest jak klient-serwer, ale każdy uczestnik ma szansę zostać serwerem. O LGD, jeśli dodasz jeszcze jedną maszynę jako serwer, istnieje większe prawdopodobieństwo, że wielu klientów jest dalej od serwera, ale używając p2p nie ma żadnych dodatkowych maszyn w lobby, możesz zarządzać testami opóźnień i tworzyć grupy z minimalnym pingiem. O generowaniu ruchu, jak się dowiedziałem, musisz poprosić klientów, aby transmitowali mniej niż mniej. Mam na myśli, że klienci muszą stwierdzić, że wszyscy inni klienci chcą to znaczyć.
źródło
Jeśli tworzysz stosunkowo prosty mmorpg o niskich wymaganiach systemowych, sugeruję utworzenie wewnętrznego programu, który tworzy „częstotliwość” na podstawie zawartości folderu gry i tego, z czego składają się pliki. Dzięki temu ludzie z tą samą „częstotliwością” będą grać na tych samych kanałach. Zmodyfikowani, zmanipulowani lub normalni klienci zostaną rozdzieleni. Będzie to działać tylko w przypadku rodzimych hacków lub modów, ale jestem pewien, że obejmuje to wszystkich „głupich” oszustów. W połączeniu z metodą sprawdzania błędów, o której wspomniała jedna osoba, oznacza to niewielką lub żadną moderację. Jeśli chodzi o porty, wystarczy, że obejmują one port 52225 z procesem w tle, który utrzymuje go podłączonym do routerów bez portów wyzwalających.
źródło