Zajmuję się tworzeniem gry strategicznej w czasie rzeczywistym na kursie informatyki. Jednym z trudniejszych aspektów wydaje się być praca w sieci klient-serwer i synchronizacja. Przeczytałem na ten temat (w tym 1500 łuczników ), ale zdecydowałem się na podejście klient-serwer w przeciwieństwie do innych modeli (na przykład przez sieć LAN).
Ta gra strategiczna w czasie rzeczywistym ma pewne problemy. Na szczęście każde działanie gracza jest deterministyczne. Istnieją jednak zdarzenia, które mają miejsce w zaplanowanych odstępach czasu. Na przykład, gra składa się z płytek, a kiedy gracz bierze płytkę, „poziom energii”, wartość na tej płytce, powinna rosnąć o jedną sekundę po jej pobraniu. To bardzo szybkie wyjaśnienie, które powinno uzasadnić mój przypadek użycia.
W tej chwili robię cienkich klientów, którzy po prostu wysyłają pakiety do serwera i czekają na odpowiedź. Istnieje jednak kilka problemów.
Kiedy gry między graczami rozwijają się w grę końcową, często dochodzi do ponad 50 zdarzeń na sekundę (ze względu na zaplanowane zdarzenia, wyjaśnione wcześniej, gromadzenie się), a wtedy pojawiają się błędy synchronizacji. Moim największym problemem jest to, że nawet niewielkie odchylenie stanu między klientami może oznaczać różne decyzje, które podejmują klienci, co prowadzi do zupełnie oddzielnych gier. Innym problemem (który obecnie nie jest tak ważny) jest opóźnienie i trzeba poczekać kilka milisekund, nawet kilka sekund po wykonaniu ruchu, aby zobaczyć wynik.
Zastanawiam się, jakich strategii i algorytmów mógłbym użyć, aby uczynić to łatwiejszym, szybszym i przyjemniejszym dla użytkownika końcowego. Jest to szczególnie interesujące, biorąc pod uwagę dużą liczbę wydarzeń na sekundę, wraz z kilkoma graczami na grę.
TL; DR tworząc RTS z> 50 zdarzeniami na sekundę, jak synchronizować klientów?