Mam pytanie dotyczące UDP. Dla kontekstu pracuję nad grą akcji w czasie rzeczywistym.
Przeczytałem sporo o różnicach między UDP i TCP i wydaje mi się, że rozumiem je całkiem dobrze, ale jest jedna rzecz, która nigdy nie wydawała się poprawna, a jest to niezawodność , a zwłaszcza podziękowania . Rozumiem, że UDP domyślnie nie zapewnia niezawodności (tzn. Pakiety mogą być odrzucane lub wysyłane poza kolejnością). Gdy wymagana jest pewna niezawodność, rozwiązaniem, które widziałem (co ma sens z koncepcyjnego punktu widzenia) jest użycie potwierdzeń (tj. Serwer wysyła pakiet do klienta, a kiedy klient odbiera tę wiadomość, odsyła potwierdzenie do serwera) .
Co dzieje się po odrzuceniu potwierdzenia?
W powyższym przykładzie (jeden serwer wysyła pakiet do jednego klienta) serwer radzi sobie z potencjalną utratą pakietów poprzez ponowne wysyłanie pakietów co ramkę, dopóki nie zostaną odebrane potwierdzenia dla tych pakietów. Nadal możesz napotykać problemy z przepustowością lub komunikatami o nieporządku, ale wyłącznie z punktu widzenia utraty pakietów serwer jest objęty.
Jeśli jednak klient wyśle potwierdzenie, które nigdy nie dotrze, serwer nie będzie miał innego wyjścia, jak ostatecznie przestać wysyłać tę wiadomość, co może przerwać grę, jeśli informacje zawarte w tym pakiecie będą wymagane. Możesz zastosować podobne podejście do serwera (tj. Wysyłać potwierdzenia aż do otrzymania potwierdzenia dla potwierdzenia?), Ale takie podejście spowodowałoby, że będziesz zapętlał się w tę iz powrotem na zawsze (ponieważ będziesz potrzebował potwierdzenia dla potwierdzenia dla potwierdzenia i tak dalej).
Czuję, że moja podstawowa logika jest tutaj poprawna, co pozostawia mi dwie opcje.
- Wyślij pojedynczy pakiet potwierdzenia i miej nadzieję na najlepsze.
- Wyślij garść pakietów potwierdzających (może 3-4) i licz na najlepsze, zakładając, że nie wszystkie zostaną odrzucone.
Czy istnieje odpowiedź na ten problem? Czy zasadniczo coś nie rozumiem? Czy jest jakaś gwarancja używania UDP, o której nie wiem? Waham się, czy iść naprzód z nadmiarem kodu sieciowego, dopóki nie poczuję się dobrze, że moja logika jest dobra.