Я недавно писал сервер UDP для 2D-шутера, который я делаю на C # и XNA для ПК, который будет обновлять и отправлять мировые данные, данные о сущностях, данные чата и т. Д., Когда это необходимо.
Недавно возник вопрос, когда я создавал для игроков способ менять свое оружие;что произойдет, если пакеты, отправленные на сервер с запросом на смену оружия, будут потеряны?Этот вопрос заставил меня задуматься над другим вопросом;как я могу сделать так, чтобы клиент и сервер могли подтвердить получение определенных пакетов или блоков данных?
Итак, я нашел следующее простое решение для решения этой проблемы:
- Сервер отправляет пакет (ы), требующие подтверждения.
- Клиент получает пакет (ы) и отправляет пакет подтверждения.
- Сервер проверяет, подтвердил ли клиент данные.Если клиент этого не сделал, отправьте данные повторно.
Предложенное решение выглядит довольно хорошо, но что произойдет, если в случае потери пакета подтверждения или с ним произойдет что-то непреднамеренное?
Лучшим решением этой проблемы было бы создание сервера и клиента, использующих TCP и UDP;где TCP используется для данных, которые должны попасть туда и прибыть в порядке / в одном мире, а UDP - для данных, которые должны быть там быстро и могут справиться с потерей или ошибкой?
Если сервер TCP / UDPа клиент - лучший выбор, каковы риски и как я могу пойти на это, чтобы реализовать это?
Спасибо.