Serwer gry w UDP

0

Witam. Chcę napisać gierkę multiplayer, która polegałaby na chodzeniu po planszy i machaniu mieczykiem, graczy byłoby max. 20. Każdy gracz wysyłałby swoją pozycję i informację, o machnięciu nożykiem od czasu do czasu. Chcę do tego napisać serwer UDP i zastanawiam się jak on powinien wyglądać. Domyślam się, że gdy jakiś gracz podłączałby się to powinienem zapisywać w liście jego port i ip, na którym działa. Gdy któryś z nich, poruszyłby się to do każdego klienta zapisanego w tejże liście musiałbym wysłać otrzymaną pozycję. Czy każdy klient powinien być nasłuchiwany w osobnym wątku? poza tym, czy powinienem wysyłać informacje o zadanych obrażeniach przez serwer, czy każdy klient powinien sobie to sam obliczyć (zakładając, że nie będzie losowych elementów) i w końcu czy trzeba każdorazowo wysyłać informacje do wszystkich, a może obliczać dla każdego z nich, którzy gracze znajdują się w polu widzenia i tylko od nich wysyłać pozycję?

1

Do tego to raczej TCP a nie UDP.

Czy każdy klient powinien być nasłuchiwany w osobnym wątku?
Może, nie musi. Wątki tutaj ułatwiają komunikację sieciową, ale utrudniają synchronizację (wszystkie te semafory i inne cuda okołowątkowe). Przy 20 graczach to dałoby 20 wątków. Ujdzie. Przy 2 tysiącach graczy to już byłoby tych wątków za dużo.

poza tym, czy powinienem wysyłać informacje o zadanych obrażeniach przez serwer, czy każdy klient powinien sobie to sam obliczyć
Klient nie powinien zajmować się sprawami mechaniki gry, czyli nie powinien nic obliczać. Wszystko przez serwer.

i w końcu czy trzeba każdorazowo wysyłać informacje do wszystkich, a może obliczać dla każdego z nich, którzy gracze znajdują się w polu widzenia i tylko od nich wysyłać pozycję?
Powinieneś wysyłać wszystko co potrzebne danemu klientowi, i nic więcej, czyli klient który danego wydarzenia nie widzi nie musi otrzymywać o nim informacji, bo i tak nic z nią nie zrobi.

0

Dlaczego UDP? UDP nie gwarantuje, że komunikat zostanie odebrany i zinterpretowany, może on zginąć w sieci, a mimo to strona nadająca uzna komunikat za poprawnie wysłany. Wtedy jeden gracz machnie mieczem, inny gracz tego nie zarejestruje i gra się rozjedzie. Moim zdaniem do takich celów lepiej zastosować TCP.

UDP nadaje się tylko do takich celów, w których istotne jest przesyłanie dużych ilości danych w czasie rzeczywistym, ale ginięcie komunikatów nie czyni systemu bezużytecznym. Sztandarowy przykład to przekaz audio/video przez sieć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1