Нужно ли рассматривать использование IOCP-сервера и не рассчитывать, если сервер отправляет около 180 000 байтов пакетов в секунду? - PullRequest
0 голосов
/ 07 января 2020

В настоящее время я проектирую сервер MORPG, и у меня есть вопрос о том, какую модель ввода-вывода мне следует использовать.
Это быстро развивающаяся RPG от третьего лица, в которую могут присоединиться от 1 до 3 игроков.
В в худшем случае может быть показано около 50 врагов.
Я подумал, что это может быть слишком много для однопоточного сервера, чтобы выполнить весь процесс обнаружения столкновений и ввода-вывода, поэтому я предварительно рассчитал, сколько данных будет обработано, и здесь мои результаты.

// (Server's tickrate is 60hz)
Object movement packets
6(header) + 2(uuid) + 4(x) + 4(y) + 4(z) = 20bytes

800bytes ~ 1000bytes per tick, player                 // 20bytes x 40~50objects
48,000bytes ~ 60,000bytes per second, player          // 800bytes ~ 1000bytes x 60frame rate
144,000bytes ~ 180,000bytes per second                // 48,000bytes ~ 60,000bytes x 3players

и у меня есть другие пакеты, менее 1000 байтов в секунду.

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

Я думаю, что IOCP может помочь повысить производительность, поскольку он использует многопоточность (я немного знаком с многопоточным программированием).
Также я рассматриваю возможность уменьшения тикрейта сервера до 10 ~ 20 и использования мертвых расчет на стороне клиента.

Разумно ли в этом случае использовать IOCP и полный расчет для предотвращения слишком большого количества работ для сервера?

...