Какова хорошая архитектура прокси-сервера Boost ASIO UDP для имитации задержек, потери пакетов и дрожания?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Какова хорошая архитектура прокси-сервера Boost ASIO UDP для имитации задержек, потери пакетов и дрожания?

Сообщение Anonymous »

Я разрабатываю многопользовательскую игру без использования игрового движка. В эту игру можно будет играть по сети с использованием UDP. Теперь я дошел до того, что игра работает локально по сети, но как только появляется задержка, необходимо сделать много вещей, чтобы уменьшить это. В игре будет один центральный сервер, который сможет обслуживать несколько клиентов.
Чтобы создать удобный способ тестирования, я хочу создать UDP-прокси, который будет останавливать пакеты, а иногда даже сбрасывать их на свои места. путь к серверу и обратно. Я попробовал это сделать, но поскольку я никогда не использовал асинхронные операции (кроме неблокирующего приема) в Boost ASIO, у меня были некоторые трудности. Текущие результаты можно увидеть здесь: https://github.com/jonlachmann/udp_proxy
Я начинаю понимать, что в моей реализации, вероятно, не так много вещей, например неуважение к тому, кто владеет памятью, передаваемой в обратные вызовы и т. д. Но поскольку есть так много вещей, которые я еще не до конца понимаю, становится трудно понять, в чем заключаются проблемы.
Поэтому, Я пришел сюда, чтобы попросить совета о том, как человек, более знакомый с Boost ASIO, мог бы спроектировать такое решение? Требования:
  • прокси-сервер должен иметь возможность принимать несколько клиентов.
  • Пакеты должны иметь возможность откладываться или даже удаляться в зависимости от некоторого распределения.
  • Сервер должен получать возможные задержанные пакеты, а обратный трафик должен отправляться обратно на прокси для дальнейших задержек/отбрасываний перед отправкой клиенту.
  • Прокси-сервер должен отслеживать, какие пакеты с сервера должны быть отправлены. к какому клиенту
Для поддержки нескольких клиентов моя идея заключалась в использовании нескольких сокетов. Один сокет, к которому могут подключаться клиенты, а затем новый сокет для каждого клиента, который будет использоваться при обмене данными с сервером.
Любые ответы помогут мне понять, как я могу изменить мое текущее решение и/или создатель лучшего решения высоко ценим.

Подробнее здесь: https://stackoverflow.com/questions/786 ... -package-d
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»