Я считаю, что ваша проблема сводится к типу игры и данных.
Это снова разбивается на:
- скорость сервера (для вычислений требуются ЦП + ОЗУ для данных о мире / игроке)
- скорость соединения (пропускная способность на сервере)
- размер данных (сколько информации нужно и как часто)
- Форма взаимодействия с игроком (событие или FPS)
- расстояние от клиента до сервера (ping)
MMORG
Например. Насколько мне известно, World Of Warcraft в мире без PVP использует «клиент - это область просмотра» и «клиент посылает нажатия клавиш», «сервер проверяет и выполняет, и сообщает клиенту, что происходит» на основе CLIENT-SERVER.
Это дает игре большую приемлемую задержку, так как вам нужно только передать команды от клиента, а затем результаты к клиенту. Остальное нарисовано на клиенте.
Само управление событиями, и когда вы нажимаете значок или нажимаете клавишу, все в порядке, что вашему «заклинанию» нужно некоторое время для запуска на сервере. Во-вторых, столкновение игроков не требуется. Это позволяет серверу обрабатывать меньше данных и сокращает требования к процессору сервера.
Counter-Strike / Battlefield и т. Д.
FPS, быстрое действие, быстрое реагирование, чтобы постоянно получать информацию о каждой детали. Это повышает требования к точности. Столкновение является обязательным как для игрока, так и для оружия.
Эта игра обычно не обрабатывает более 32 игроков на одной карте, так как все они должны очень быстро делиться своими позициями, пулями, взрывами и т. Д., И все эти данные должны пройти проверку на сервере. что опять-таки является узким местом для любой онлайн-игры.
Сетевая задержка
В идеальном мире это будет 0 мс, но, как мы все знаем. Все оборудование от клиента до сервера и обратно занимает время. Как через сетевые стеки, так и через интернет-соединение (коммутатор, маршрутизатор, модем, оптоволоконные сети и т. Д.), Поэтому многие современные игры в реальном времени исправляют это путем «предсказания». Позвольте серверу взглянуть на ваше направление и скорость. Затем они пытаются предсказать (как и GPS в туннеле), что вы в последний раз видели движение вперед со скоростью +4, поэтому с учетом временного периода вы двигались (временные рамки x 4) - но что, если вы замедлились или ускорились? вверх? затем они либо мгновенно «перепрыгивают» вас из А в В за долю секунды, и вы чувствуете, что игра запаздывает, или они легко переходят в реальное положение, так что ваш «герой» скользит немного быстрее или медленнее в правильное положение.
Этот метод объясняется во многих местах сети, поэтому здесь нет необходимости в деталях, но для того, чтобы получить хорошую производительность, требуются время и настройки, но он работает и избавляет программистов от многих проблем.
Какие данные сети необходимы?
Я прочитал ваш вопрос и подумал: это может быть сжато довольно много. Во-вторых, я сделал чат с сокетом Flash на чистом ByteStream, и это сработало. Начать было тяжело, но как только я его запустил, все стало быстро.
Флэш-клиент / плеер сам по себе не является крупнейшим сетевым клиентом, так что ожидайте также много потерянной скорости. Я бы выбрал 10-15 кадров в секунду для сетевой части, а затем использовал бы более RAW подход для данных, отправляемых туда и обратно.
Наконец, постарайтесь максимально упростить данные.
Например. используйте КОМАНДЫ / СОКРАЩЕНИЯ для определенных данных / событий.
Например, строка данных сервера может быть: 0x99, 0x45,0x75,0x14,0x04,0x06
Где 0x99 означает: БОЛЬШОЙ ВЗРЫВ в следующих КООРДАХ: (0x45,0x75)
Тогда 0x14 означает: ИГРОК 0x14 (игрок 20 в десятичном формате) переместился в (0x04, 0x06)
Таким образом, стартовый код операции сообщает обработчику сетевых протоколов на вашем клиенте и сервере, что ожидать дальше. (Это то, как процессор знает, как читать память между прочим.)
Для моего чата у меня были команды для каждого типа проанализированных данных. Один для входа в систему, один для трансляции, для сообщения имени пользователя и т. Д. Поэтому, как только клиент сделал вход в систему, клиент получил команду + множество онлайн-пользователей. Это было передано только один раз клиенту. После этого каждый подключенный клиент тоже получал команду «новый пользователь онлайн» с именем нового пользователя. Каждый клиент вел свой собственный список с текущими пользователями и идентификаторами, так что мне нужно было только сказать, какой номер клиента говорит текст. Это держало трафик на минимуме. То же самое можно сказать о координатах или командах того, что делать. «Игрок №20 идет на север» и т. Д. Может быть 0x14, 0x41, 0xf0 (0x41 может быть MOVE, 0xf0 может быть NORTH, 0xf1 EAST и т. Д.)
Это физическое расстояние до игры
Это нельзя изменить, но вы можете наложить некоторые ограничения или заставить серверы работать в разных местах по всему миру, в зависимости от того, какую игру вы хотите создать. Amazon EC2 является отличной платформой для таких проектов, поскольку у них есть дата-центры по всему миру, и вы можете сравнить их с сетью пользователей, а затем перенаправить пользователей в ближайший центр обработки данных, где вы используете сервер.
Взлом / жульничество
Также помните, что если что-то становится популярным, и вы начинаете на нем зарабатывать, рано или поздно SOMEONE попытается нарушить протоколы или взломать учетные записи, чтобы получить доступ к серверам, информации или читам, чтобы получить дополнительные предметы / очки в игры. Вы также можете быть атакованы DDOS, когда они атакуют вашу сеть неверными данными, просто чтобы все сломать и сделать игру непригодной для использования.
Для начала не возражайте против этого, просто помните, что как только вы выходите в интернет, вы НИКОГДА не знаете, кто в мире или где они находятся. Я не пытаюсь сделать вас параноиком, но есть больные люди, которые будут пытаться зарабатывать деньги, обманывая других.
Так что подумайте об этом в своих структурах, не показывайте данные в сетевых пакетах, которые не нужны. Не верьте, что данные от клиента всегда верны. Проверка данных на стороне сервера.
Это также требует времени, если у вас есть 100 активных игроков одновременно.
Но как только вы это сделаете, вы сможете спать намного лучше, если это станет для вас большим успехом, на что я действительно надеюсь.
Это были мои мысли из опыта. Надеюсь, что-нибудь из этого будет полезным, хотя я не совсем ответил, возможно ли 100 игроков.
Фактически, я бы сказал: ДА 100 игроков возможно, но это зависит от того, все ли они движутся одновременно и требуется ли тестирование столкновения, и примете ли вы лаг или нет.