Zasady projektowania gier wieloosobowych w czasie rzeczywistym dla Node.js


12

Czytałem artykuł Valve na temat sieci dla wielu graczy, który został zaadaptowany z artykułu Yahna Berniera z 2001 roku zatytułowanego Metody kompensacji opóźnień w projektowaniu i optymalizacji protokołu w grze klient / serwer . Tworzę grę wieloosobową w czasie rzeczywistym, używając serwera node.js połączonego z klientami przez socket.io i mam kilka pytań dotyczących zasad wyszczególnionych poniżej:

Interpolacja jednostek

[Interpolacja] zapobiega ruchowi roztrzęsienia, do którego to zwykle prowadzi buforowanie aktualizacji serwera, a następnie odtwarzanie ich z płynnie interpolowanymi przerwami. Może także chronić przed usterkami spowodowanymi utratą pakietów.

Prognozy po stronie klienta

Prognozowanie to pojęcie klienta przewidujące skutki działań lokalnego gracza bez oczekiwania na potwierdzenie przez serwer. Przewidywany stan jednostki jest testowany pod kątem poleceń serwera, gdy nadchodzą, dopóki nie zostanie wykryte dopasowanie lub błędne dopasowanie.

Kompensacja opóźnień

Kompensacja opóźnień to pojęcie serwera wykorzystującego opóźnienie odtwarzacza do przewijania czasu podczas przetwarzania [danych wejściowych użytkownika], aby zobaczyć, co zobaczył gracz, gdy polecenie zostało wysłane. W połączeniu z prognozowaniem kompensacja opóźnień może pomóc zwalczyć opóźnienie sieci do tego stopnia, że ​​prawie eliminuje je z perspektywy atakującego.

  • Czy zasady mają zastosowanie do TCP, podobnie jak do UDP i czy będą jakieś różnice we wdrażaniu? Widzę, że interpolacja bytu nie musiałaby chronić przed utratą pakietów, ale o to chodzi.

  • Czy mogę nawet komunikować się między serwerem a przeglądarką internetową i odwrotnie za pomocą UDP i Node.js?

  • Skoro papier ma ponad dekadę, czy zasady te są nadal w użyciu, czy pojawiła się inna technologia?

Każda pomoc będzie mile widziana.


1
W przeciwieństwie do popularnego przekonania, tak naprawdę nie potrzebujesz UDP do gier wieloosobowych. Ucz się od najlepszych; WoW używa TCP i wierzę, że wiele innych gier wieloosobowych AAA tak. Ludzie po prostu postępują zgodnie z czyimiś poradami, a następnie spędzają kolejne 5 miesięcy na wdrażaniu złej i wolnej wersji TCP!
jcora

1
(Chyba, że ​​oczywiście jesteś pewien, że masz wiedzę i zasoby, aby opracować przyzwoity protokół UDP, który mógłby wykorzystać jego zalety.)
jcora

1
Żadna z gier AAA FPS nie używa TCP. Jest naprawdę zbyt wolny dla gier wymagających aktualizacji w czasie rzeczywistym. Ale ponieważ nie pisze gry akcji, powinien być w stanie uciec od TCP.
Brendan Lesniak

@Yannbane Nie wiedziałem, że WoW używa TCP. Z tego, co mogłem znaleźć, wydaje się, że robi to wiele MMO. Sprawia, że ​​jestem bardziej pewny pisania gier wieloosobowych z HTML5. Dzięki!
dreta

Odpowiedzi:


6
  • Zasady zmniejszania skutków opóźnień są takie same, niezależnie od protokołu transportu. Utrata pakietów to kolejny temat - dla wielu rodzajów utraty pakietów nie jest to krytyczne, ponieważ kolejna aktualizacja prawdopodobnie już jest w drodze - tutaj UPD ma tę zaletę, ale gdy musisz upewnić się, że dany pakiet jest dostarczony, potrzebujesz niestandardowego kod potwierdzenia, aby to zrobić za pomocą UDP
  • Node.js obsługuje UDP, ale przeglądarki internetowe nie obsługują (bez wtyczek). Najlepszą metodą komunikacji między nimi w czasie rzeczywistym jest Web Sockets, czyli w zasadzie TCP. Ale do komunikacji możesz użyć Socket.IO, który zapewnia rezerwy dla przeglądarek, które nie obsługują gniazd sieciowych.
  • Zasady pozostają takie same.

1
Myślę, że to jest przestarzałe - WebRTC powinien być sposobem na komunikację podobną do UDP, prawda?
Nikolay Tsenkov

4

Powinieneś sprawdzić ten artykuł na temat gier wieloosobowych w czasie rzeczywistym w HTML5 opublikowanym na stronie buildnewgames.com przez Svena Bergstroma, mówi o tych samych rzeczach i używa Node.JS. Mam coś podobnego. Właśnie teraz badam więcej na temat prognoz i interpolacji po stronie klienta i tym podobnych, zanim spróbuję rozwiązać resztę.

Wierzę, że jest to zdecydowanie możliwe w przypadku Socket.IO i Node, jednak technologia jest wciąż nowa, więc będzie niewiele dokumentacji i niewiele do niczego w przewodnikach po implementacji. Poleciłbym robić to, co robię i szczegółowo studiować ten temat w abstrakcyjnych kategoriach na wysokim poziomie, a następnie spróbować sam go wdrożyć.


1

Wierzę, że technologia jest prawie taka sama. Ponadto pojęcia nie zależą od używanego języka ani od tego, czy korzystasz z UDP czy TCP. Bardzo szczegółowe wyjaśnienie tego wszystkiego napisałem tutaj http://www.gabrielgambetta.com/fpm1.html , w tym ładne diagramy :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.