Cóż, jest ta książka - która jest już trochę stara i nigdy tak naprawdę jej nie czytałem, ale pochodzi od renomowanego wydawcy. Znalazłem też ten , który jest nowszy, ale nigdy wcześniej o nim nie słyszałem. Oba twierdzą, że obejmują kwestie związane z tworzeniem gier MMO (lub przynajmniej online); to powiedziawszy, przewidywania po stronie klienta są mniej więcej takie same, niezależnie od skali Twojej bazy współbieżnych graczy, a Google ma wiele informacji na ten temat .
Ważne jest, aby zdać sobie sprawę, że z praktycznego punktu widzenia deweloperowi niezależnemu / hobbystycznemu trudno jest stworzyć grę, która będzie na tyle popularna, że nawet zdobędzie wystarczającą liczbę graczy, aby osiągnąć teoretyczną szczytową współbieżność na tyle wysoką, że można ją uznać za „masywną”. Ale techniki te mogą nadal być edukacyjne do badań.
Istnieją dwie główne klasyfikacje rzeczy, które możesz zrobić:
- Bądź agresywny, wysyłając tylko minimalną ilość danych do minimalnego zestawu klientów, którzy ich potrzebują.
- Zaprojektuj grę, która nie zachęca graczy do nadmiernego gromadzenia się, pomagając w utrzymaniu niewielkiej liczby „klientów, którzy potrzebują” rzeczy.
Drugi to tak naprawdę problem z projektowaniem gier i manipulacjami społecznościowymi - jest to szczególnie trudne, ponieważ gry wieloosobowe są naturalnie społecznościowe, to część ich atrakcyjności, więc nie chcesz zbytnio zniechęcać grup graczy. Z drugiej strony, gra, w której wszyscy na świecie odradzają się jako ten, który upuści najlepsze łupy w grze, będzie trudna do skalowania.
W przypadku pierwszej opcji możesz rozważyć wielopoziomowe przesyłanie wiadomości - o innych graczach zawsze warto wiedzieć, na przykład pozycje. Ale inne rzeczy, takie jak zdrowie, mogą nie być tak ważne dla obiektów, których aktualny gracz jeszcze nie widzi, więc zamykasz to, co wysyłasz do tego gracza, na podstawie względnej odległości wszystkich innych istot w jego pobliżu - jest to zasadniczo dławienie dane, które wysyłasz, jak wspomniałeś w ostatnim fragmencie pytania, a także ich filtrowanie.
Bardzo duże architektury dla wielu graczy będą również buforować raporty, które nie muszą być natychmiast podejmowane. Wiadomości zapisywania znaków wysyłane na serwer można wykonywać w delcie, z pełnymi aktualizacjami tylko w krytycznych punktach, a te aktualizacje można buforować na serwerze dławiącym, aby były wysyłane do serwera, który faktycznie przechowuje dane postaci, okresowa moda - w miarę skalowania bazy odtwarzacza musisz się martwić o optymalizację IO dysku oraz ruch sieciowy. Nie chcesz powodować, że baza danych postaci zostanie zniszczona.
Szybkość i rozmiar pakietów różni się znacznie w zależności od gry, podobnie jak w przypadku gier innych niż MMO. To jest naprawdę bardzo specyficzne dla wymagań i nie ma uogólnionych standardów.
Oprócz powyższej odpowiedzi przeczytaj w TCP_NODELAY i o tym, jak działa skalowanie okien. Zrozumienie szczegółów TCP (i tak, chcesz używać TCP, a nie UDP, chyba że perspektywa obsługi różnicowych aktualizacji przychodzących poza kolejnością brzmi zabawnie) i retransmisja jest krytyczna dla kontroli opóźnień.
źródło