Добрый вечер(день). Пишу сервер на C. И при проектировании взаимодействия встал вопрос сортировки пакетов между клиентами. Подскажите, как лучше?
1) Есть map клиентов. При присылаемом пакете я определяю по IP:PORT есть ли такой клиент. Затем если нет, то создаю такого клиента в поток и детачу. А уже внутри он обрабатывает все входящие пакеты и выполняет только те, которые присланы ему. И так с каждым клиентом.
2) Есть опять же список клиентов, но в этом случае, каждый раз вызывается обработчик для пакета без создания в поток.
3) Либо же 2 вариант, только каждый пакет это считай новый поток на выполнение
Что подскажете? Как это сделать в Udp? Просто была ещ одна идея: открыть и TCP и UDP в одном сервере. При новом TCP, создавать клиента с TCP подключением и дескриптором UDP сокета. И уже внутри обрабатывать.
Выбор зависит от типа игры.
Обычно, делается отдельно:
1. Обработка для юникаст-соединений (шлём сразу нескольким клиентам). Создаём один бесконечный поток. При получении - обрабатываем также в одном едином потоке.
2. Обработчик клиент-серверного обмена (данные, не влияющие на игровой процесс других игроков). Создаём "умирающие" экземпляры потоков. Обрабатываем в отдельных потоках.