UDP vs TCP: Dlaczego warto uruchamiać serwery gier oddzielnie od czatu?
Published: 2023-11-29 15:34:56

Jeśli chodzi o tworzenie gier wieloosobowych, deweloperzy często stają przed dylematem.

-   Czy wykorzystać istniejące serwery gier, które już obsługują funkcję gry wieloosobowej, do uruchomienia czatu?
    
-   Czy oddzielić serwery gier i uruchomić czat niezależnie?
    

Bo w końcu to tylko wiadomości na czacie, prawda? Małe wiadomości wysyłane do pojedynczego użytkownika lub małej grupy, równie dobrze można po prostu wykorzystać to, co już zostało zbudowane? Co może zaszkodzić? Chociaż początkowo może się wydawać, że dobrym rozwiązaniem jest wykorzystanie tego, co już zostało zbudowane, istnieje wiele problemów, które mogą wyniknąć z wyboru tego wzorca projektowego.

Pokażemy ci, dlaczego powinieneś uruchomić swoje serwery gier i funkcje społecznościowe (przede wszystkim [czat](https://www.pubnub.com/use-case/in-app-chat/)) niezależnie, co przyniesie korzyści zarówno tobie jako twórcy gier, jak i użytkownikom końcowym. W ten sposób zwiększysz wydajność i skalowalność samej gry oraz umożliwisz łatwe rozszerzenie funkcji społecznościowych o nowe funkcje w przyszłości.

**Czym są protokoły TCP i UDP?**
--------------------------------

Zasadniczo TCP i [UDP](https://www.pubnub.com/guides/udp/) to protokoły sieciowe używane do przesyłania danych przez Internet. TCP jest protokołem internetowym zorientowanym na połączenia, podczas gdy z drugiej strony UDP jest protokołem bezpołączeniowym.

Wielka debata na temat protokołów gier wieloosobowych dotyczy tego, kiedy należy używać UDP [(](https://www.pubnub.com/guides/tcp-ip/) User Datagram Protocol), a kiedy [TCP (Transmission Control Protocol)](https://www.pubnub.com/guides/tcp-ip/) i kiedy najlepiej jest używać jednego z nich?

Zanim jednak do tego przejdziemy, omówmy architekturę gier online.

**Serwery gier UDP vs TCP: Jak sprawić, by gra online była łatwiejsza w zarządzaniu?**
--------------------------------------------------------------------------------------

Architektura zorientowana na mikrousługi dzieli dużą aplikację, w tym przypadku grę, na małe, niezależnie wersjonowane usługi modułowe, które komunikują się ze sobą za pomocą prostych, powszechnie dostępnych interfejsów API. Ułatwia to budowanie nowych funkcji i utrzymanie przepustowości i funkcjonalności po ich zbudowaniu.

Oddzielenie serwerów gier od funkcji czatu sprawia, że cała infrastruktura jest łatwiejsza w zarządzaniu i zbliża cię do architektury całkowicie zorientowanej na mikrousługi. W tym przypadku przyjrzyjmy się konkretnie czatowi w grze i jego relacji z serwerami gry zasilającymi grę wieloosobową.

Przy monolitycznej architekturze zespół programistów jest teraz zamknięty w jednym stosie technologicznym - używając tych samych języków programowania, baz danych i środowisk programistycznych, na których gra została już zbudowana. Wprowadzając nowych programistów lub chcąc prototypować nowe technologie i systemy, znacznie łatwiej jest szybko poruszać się w architekturze mikrousług.

Zależności są również znacznie bardziej widoczne w przypadku architektur monolitycznych. Jeśli pojedyncza funkcja aplikacji zawiedzie, cała gra ulegnie awarii. Dzieląc grę na mikrousługi, jeśli zawiedzie pojedynczy moduł, łatwiej jest wyizolować błąd i go naprawić.

Serwery gry są stworzone do [dostarczania ruchu i stanu gracza](https://www.pubnub.com/docs/general/presence/overview) w czasie rzeczywistym i robią to dobrze. Zmiana przeznaczenia tej samej technologii i projektu dla wiadomości czatu jest po prostu niewykorzystaniem najlepszych opcji dla danej funkcjonalności. Zdecentralizowane komponenty są łatwiejsze w utrzymaniu i lepiej się skalują.

![](https://images.ctfassets.net/3prze68gbwl1/h3rC4If7TY4W9s4s3NADr/ef310e0b3415530bc0cfcd72a089131c/game-infrastructure.png)

Przykład infrastruktury gry, w której czat jest oddzielony od serwerów gry. Możemy również uruchomić inne usługi poza serwerami gry, w tym autoryzację, obecność oraz statystyki i tabele wyników.

**Serwery gier UDP vs TCP: Zapewnienie płynnej rozgrywki i wydajności czatu**
-----------------------------------------------------------------------------

Ogólna wydajność gry jest głównym czynnikiem wpływającym na rozgrywkę wieloosobową. Dzięki monolitycznej architekturze gra może działać w laboratorium, ale w przypadku gier online z dużą liczbą użytkowników, komunikujących się w szybkim tempie, zaczniesz dostrzegać opóźnienia i zwiększone opóźnienia zarówno w dostarczaniu wiadomości na czacie, jak i wrażeniach z gry.

Rozdzielenie tych dwóch elementów zapewnia bardziej efektywne wykorzystanie zasobów procesora i sieci. Głównym celem serwerów gier jest zapewnienie płynnego doświadczenia każdemu użytkownikowi w grze. W rezultacie moc obliczeniowa powinna być wykorzystywana do maksymalizacji wydajności.

Załóżmy, że posiadasz grę online typu League of Legends lub EVE Online. Możesz mieć setki graczy w jednym świecie, w jednym czasie. Oznacza to tysiące wiadomości wysyłanych przez serwery gry, dostarczających każde dane wejściowe tworzone przez każdego gracza. Do tego dochodzą wiadomości na czacie. Jest całkowicie możliwe, że gracze mogą spamować kanał czatu i celowo spowalniać serwer gry, ponieważ wszystkie wiadomości miałyby ten sam priorytet.

Serwer gry już obsługuje intensywne wrażenia z rozgrywki - fizykę, grafikę, dźwięk. Dodając do tego wiadomości na czacie - jeden do jednego, grupowe, zespołowe - analizowanie i kierowanie wiadomości do właściwych użytkowników - wszystkie te wiadomości powoli gromadzą się w przypadku gier na dużą skalę i szkodzą ogólnej wydajności gry. Uruchomienie kanałów czatu oddzielnie od kanałów dla wielu graczy jest bardzo proste. Jest to kradzież ważnej mocy obliczeniowej, która może być lepiej dostosowana do bardziej złożonych problemów niż kierowanie wiadomości czatu.

**TCP vs UDP - kiedy potrzebujesz obu, a kiedy nie**
----------------------------------------------------

Szybkie gry wieloosobowe (strzelanki pierwszoosobowe, gry arenowe itp.) wykorzystują protokół UDP do synchronizacji ruchu graczy i aktualizacji stanu gry. Nagłówki UDP są idealne do wysyłania tych aktualizacji gier z absurdalną prędkością, ale wiadomości nie są gwarantowane (ponieważ następna wiadomość nadchodzi tak szybko).

### Dlaczego UDP jest preferowany w stosunku do TCP? I odwrotnie?

Połączenie TCP gwarantuje dostarczanie wiadomości, co czyni je świetną opcją dla czatu. Zobaczysz świetną wydajność uruchamiając grę na UDP i funkcje społecznościowe na TCP.

![](https://images.ctfassets.net/3prze68gbwl1/3F6epR2uvWaGMsZs6QVgjF/43009b230140dde81fa41153063718d9/tcp-vs-udp.png)

Jednak w przypadku mniej intensywnych gier wieloosobowych, takich jak gry turowe, TCP jest odpowiednią opcją zarówno dla rozgrywki, jak i czatu. Ponieważ TCP gwarantuje dostarczanie wiadomości, a w grach, w których każdy ruch ma znaczenie (takich jak tura Scrabble lub kółko i krzyżyk), jest to świetna opcja do zasilania rozgrywki wieloosobowej. Oczywiście nadal będziesz chciał oddzielić czat od połączeń z serwerem gry, zwłaszcza gdy gra się rozkręci i będziesz mieć tysiące użytkowników połączonych w tym samym czasie.

### Rozważ opóźnienia przy wyborze TCP i UDP dla różnych funkcji

Opóźnienia to kolejna rzecz, którą należy wziąć pod uwagę, ponieważ istnieją różne standardy opóźnień dla funkcji dla wielu graczy i funkcji społecznościowych. W przypadku gry wieloosobowej, zapewniając stan gry i dostarczając dane wejściowe gracza, standardem branżowym jest nie więcej niż 20 ms. Natomiast w przypadku aplikacji czatu, maksymalne opóźnienie w dostarczeniu wiadomości czatu wynosi 250 ms. Mamy więc do czynienia z dwoma różnymi rodzajami wiadomości w czasie rzeczywistym dla gier online, z dwoma różnymi standardami. Posiadanie ich osobno pozwala zarządzać każdym z nich w oparciu o to, co jest wymagane.

**Łatwe dodawanie nowych funkcji społecznościowych przy użyciu protokołu TCP lub UDP**
--------------------------------------------------------------------------------------

Uruchomienie czatu jako samodzielnej usługi i wybranie standardowego protokołu sieciowego[(XMPP](https://www.pubnub.com/learn/glossary/what-is-xmpp/), [WebSockets](https://www.pubnub.com/guides/what-are-websockets-and-when-should-you-use-them/), [ngrok](https://www.pubnub.com/guides/what-is-ngrok/)) lub hostowanej usługi (PubNub) otwiera możliwość łatwego dodawania nowych zaawansowanych funkcji społecznościowych.

Zacznij od podstawowego czatu, umożliwiając użytkownikom czat indywidualny i grupowy. Dzięki temu masz podstawową infrastrukturę, a także podstawowe funkcje [publikowania / subskrybowania](https://www.pubnub.com/guides/everything-you-need-to-know-about-pub-sub/), a także wiele innych funkcji społecznościowych, które możesz łatwo zbudować. W minimalnym kodzie można dodać funkcje czatu ze stosem tabel, takie jak wskaźniki pisania, obecność, aby pokazać, którzy gracze są online i offline, oraz liczniki nieprzeczytanych wiadomości - funkcje oczekiwane przez użytkowników.

**TCP i UDP: Patrząc w przyszłość**
-----------------------------------

Duże i małe aplikacje do gier zmierzają w kierunku tego projektu architektonicznego, w tym [Pocket Gems](https://www.pubnub.com/customers/pocket-gems/)a ostatnio [EVE Online](https://www.eveonline.com/article/p4i0qx/new-chat-backend-coming-with-the-march-release). Od lepszej skalowalności, kontroli przepływu i bardziej wydajnej wydajności, po swobodę wprowadzania innowacji bez ograniczania się do jednego stosu, korzyści są oczywiste - oddzielenie czatu od serwerów gry jest najlepszym rozwiązaniem.

_Dzięki PubNub Chat można łatwo_ [_zaimplementować czat w grze_](https://www.pubnub.com/industry/gaming/) _jako podstawę solidnych funkcji społecznościowych, pozwalając skupić się bardziej na głównym rozwoju gry, a mniej na skalowaniu i utrzymywaniu infrastruktury społecznościowej_.

#### **_Odniesienia_**

-   [_Pierwsze kroki w programowaniu gier wieloosobowych_](https://hub.packtpub.com/getting-started-multiplayer-game-programming/)
    
-   [_Analiza i refaktoryzacja architektury czatu w EVE Online_](http://uu.diva-portal.org/smash/get/diva2:408940/FULLTEXT01.pdf)
    

Jak PubNub może ci pomóc?
=========================

Ten artykuł został pierwotnie opublikowany na [PubNub.com](https://pubnub.com/blog/tcp-vs-udp/)

Nasza platforma pomaga programistom tworzyć, dostarczać i zarządzać interaktywnością w czasie rzeczywistym dla aplikacji internetowych, aplikacji mobilnych i urządzeń IoT.

Podstawą naszej platformy jest największa w branży i najbardziej skalowalna sieć komunikacyjna w czasie rzeczywistym. Dzięki ponad 15 punktom obecności na całym świecie obsługującym 800 milionów aktywnych użytkowników miesięcznie i niezawodności na poziomie 99,999%, nigdy nie będziesz musiał martwić się o przestoje, limity współbieżności lub jakiekolwiek opóźnienia spowodowane skokami ruchu.

Poznaj PubNub
-------------

Sprawdź [Live Tour](https://www.pubnub.com/tour/introduction/), aby zrozumieć podstawowe koncepcje każdej aplikacji opartej na PubNub w mniej niż 5 minut.

Rozpocznij konfigurację
-----------------------

Załóż [konto](https://admin.pubnub.com/signup/) PubNub, aby uzyskać natychmiastowy i bezpłatny dostęp do kluczy PubNub.

Rozpocznij
----------

[Dokumenty](https://www.pubnub.com/docs) PubNub pozwolą Ci rozpocząć pracę, niezależnie od przypadku użycia lub [zestawu SDK](https://www.pubnub.com/docs).