Как создать два сокета udp, где один отправляет запросы, а другой получает ответы? - PullRequest
0 голосов
/ 09 февраля 2020

Я ищу правильный способ, чтобы одна программа распределяла пакеты запросов на указанные c серверы, а вторая программа получала ответы и обрабатывала их, возможно, даже создала новую программу для каждого обрабатываемого ответа.

Архитектура игры состоит в том, что существует несколько мастер-серверов, которые могут запрашивать списки IP-адресов зарегистрированных серверов. После получения ips и портов от мастер-серверов каждый из ips получает запрос на свои данные, такие как имя сервера, карта, игроки и т. Д. c.

Кроме того, существуют ли лучшие способы справиться с этим? В настоящее время я создаю goroutine для запроса, который также ждет ответа впоследствии. Ожидание тайм-аута ответа после 35 мс и продолжает отправлять в 1,2 раза предыдущее количество пакетов запроса, чтобы иметь небольшой пакет запросов. Кроме того, время ожидания удваивается при каждой повторной попытке.

Я хотел бы знать, существуют ли более эффективные стратегии, которые оказались более надежными и имеют меньшую задержку, но не слишком сложные.

Редактировать: я только создаю сокеты на стороне клиента, но, если нет лучшего подхода, клиент будет отправлять пакеты запроса UDP, которые содержат адрес другого сокета в качестве значения отправителя, чтобы получать ответы на другой сокет, который действует вроде как сервер, где собраны все ответные пакеты. Чтобы отделить отправляющий сокет от принимающего сокета.

Этот вопрос помечен как клиент-сервер, так как один из сокетов должен действовать как сервер, даже если он получает ожидаемые ответы в ответ запрашивать пакеты, отправленные клиентским сокетом.

...