В настоящее время я проектирую сервер 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 и полный расчет для предотвращения слишком большого количества работ для сервера?