Jump to content

Сверхмассовые Бои


  • You cannot reply to this topic
68 replies to this topic

#61 mk4i9661

    Member

  • PipPipPipPipPipPip
  • Knight Errant
  • 306 posts

Posted 18 February 2014 - 05:59 AM

View PostOxyphill, on 18 February 2014 - 04:53 AM, said:


Еще разок для жирафа, один игрок делает 16 сообщений?! В какой момент и почему 16?


Думаю имелось в виду следующее: один игрок, например, выстрелил из лазера. Информация о выстреле идет на сервер, сервер обрабатывает и отправляет всем остальным результат обработки (возможно, тут исключают самого игрока, как уж разработчики сделают). Если игроков было 16, то каждому из них отправляется результат обработки. Но играет не один игрок, а все 16. Каждый из них совершает какие-либо действия (ходит, стреляет, вертит торсом, флеймит в чате), т.е. генерирует сообщения, которые требуется отправить на сервер для обработки. Соответственно, если все игроки за какой-либо промежуток времени сделали какое-нибудь действие, то будет 16 сообщений отправлено на сервер и 16 * 16 сообщений отправлено сервером игрокам в виде результата.

#62 Nick0lay13

    Member

  • PipPipPip
  • 93 posts

Posted 18 February 2014 - 08:30 AM

Чтобы увеличить масштаб боёв, нужно увеличить количество серверов. Да и чтобы всё это разработать, нужны прямые руки и неплохая команда разработчиков. Руки, а не плавники!

#63 Varhait

    Archivarius

  • PipPipPipPipPipPipPipPipPipPip
  • Overlord
  • Overlord
  • 9,699 posts

Posted 18 February 2014 - 08:49 AM

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

#64 Mellkor19

    Member

  • PipPipPip
  • Philanthropist
  • Philanthropist
  • 53 posts
  • LocationTian-tan, Liaoning, St. Ives, St. Ives Compact

Posted 18 February 2014 - 09:02 AM

View Postmk4i9661, on 18 February 2014 - 05:59 AM, said:


Думаю имелось в виду следующее: один игрок, например, выстрелил из лазера. Информация о выстреле идет на сервер, сервер обрабатывает и отправляет всем остальным результат обработки (возможно, тут исключают самого игрока, как уж разработчики сделают). Если игроков было 16, то каждому из них отправляется результат обработки. Но играет не один игрок, а все 16. Каждый из них совершает какие-либо действия (ходит, стреляет, вертит торсом, флеймит в чате), т.е. генерирует сообщения, которые требуется отправить на сервер для обработки. Соответственно, если все игроки за какой-либо промежуток времени сделали какое-нибудь действие, то будет 16 сообщений отправлено на сервер и 16 * 16 сообщений отправлено сервером игрокам в виде результата.


А вот тут и всплывает оптимизация сетевого кода "пиранья-стайл", ведь при такой конфигурации бой 64 игроков будет просто адским для любого сервера. А вот только одна из идей оптимизации. Для начала принимаем тот факт, что клиент отсылает на сервер пакет с данными, которые он совершил за такт, каждый такт, и размер пакета примерно не меняется. В этом случае увеличение числа игроков увеличивает нагрузку на сервер линейно. Далее вспоминаем тот факт, что на клиентском компе отсчитывается всё поле боя, так что каждый клиент должен получать информацию о каждом мехе. В данном случае получаем тот факт, что всем игрокам нужно отослать информацию обо всех игроках, то есть всем клиентским приложениям достаточно отослать один и тот же пакет с данными. В итоге получаем, что нагрузка при правильной оптимизации должна возрастать линейно, хотя тут ещё нужно учесть возрастающий объём пакета данных, но в итоге получим примерно 64*4, но никак не 64*64. Далее можно ещё упростить введя второй сервер, назовём его промежуточным, на него поступают данные от игроков, он формирует большой "общий" пакет данных, и пересылает его на основной, расчётный сервер. Основной сервер обрабатывает данные и отсылает "общий" ответ на промежуточный сервер. Он уже дробит пакет основываясь на нуждах клиентов и рассылает пакеты игрокам. В данном варианте промежуточных серверов может быть несколько, и они могут быть распределены по регионам. Я это в вкратце накидал, и это далеко от реальности, но это показывает, что если нагрузка при увеличении игроков возрастает квадратично, а не линейно, то надо плавники отрывать создателям и оптимизаторам сетевого кода...

#65 Nanotentacle

    Member

  • Pip
  • 14 posts

Posted 18 February 2014 - 10:32 PM

View Postmk4i9661, on 18 February 2014 - 05:59 AM, said:


Думаю имелось в виду следующее: один игрок, например, выстрелил из лазера. Информация о выстреле идет на сервер, сервер обрабатывает и отправляет всем остальным результат обработки (возможно, тут исключают самого игрока, как уж разработчики сделают)...


Благодарю, это достаточно точное отражение того, что я хотел передать.

Quote

А вот тут и всплывает оптимизация сетевого кода "пиранья-стайл", ведь при такой конфигурации бой 64 игроков будет просто адским для любого сервера. А вот только одна из идей оптимизации. Для начала принимаем тот факт, что клиент отсылает на сервер пакет с данными, которые он совершил за такт, каждый такт, и размер пакета примерно не меняется. В этом случае увеличение числа игроков увеличивает нагрузку на сервер линейно. Далее вспоминаем тот факт, что на клиентском компе отсчитывается всё поле боя, так что каждый клиент должен получать информацию о каждом мехе. В данном случае получаем тот факт, что всем игрокам нужно отослать информацию обо всех игроках, то есть всем клиентским приложениям достаточно отослать один и тот же пакет с данными. В итоге получаем, что нагрузка при правильной оптимизации должна возрастать линейно, хотя тут ещё нужно учесть возрастающий объём пакета данных, но в итоге получим примерно 64*4, но никак не 64*64. Далее можно ещё упростить введя второй сервер, назовём его промежуточным, на него поступают данные от игроков, он формирует большой "общий" пакет данных, и пересылает его на основной, расчётный сервер. Основной сервер обрабатывает данные и отсылает "общий" ответ на промежуточный сервер. Он уже дробит пакет основываясь на нуждах клиентов и рассылает пакеты игрокам. В данном варианте промежуточных серверов может быть несколько, и они могут быть распределены по регионам. Я это в вкратце накидал, и это далеко от реальности, но это показывает, что если нагрузка при увеличении игроков возрастает квадратично, а не линейно, то надо плавники отрывать создателям и оптимизаторам сетевого кода...


Нед. Все равно будет 64х64. Потому как пакет от каждого клиента должен дойти до каждого играющего. Т.е. один пакет от одного играющего должен быть передан 64 раза. И речь идет не про количество пакетов, а про возрастание трафика, не надо путать эти вещи. В процессе передачи сообщений, при превышении некоторого размера пакет может быть нарезан на несколько частей. И наоборот, если два пакета посланы с достаточно коротким промежутком времени, принимающий компьютер вполне может их объединить в один. Так что уместно говорить именно о трафике, а не о пакетах.

Оптимизация сетевого кода ведется несколько иным путем. Например, в первую очередь, избавляются от лишней информации. Например, для передачи текстовой информации на каждый символ нам нужен 1 байт данных ( 8 бит). При этом, на каждый символ, который является цифрой, нам вполне достаточно 5 битов. Можно провести этакую компрессию, зная тип передаваемых данных.

Или, как еще один вариант: передавать данные только тех игроков, которые непосредственно видны самому игроку. Но это увеличит нагрузку на вычислительную часть сервера.

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

Но как же все же должно быть в идеале? А в идеале должно быть несколько иначе. Посылать пакеты каждый такт - это жесть, давайте оставим такую штуку для игр типа Supreme Commander. А в экшенах и симуляторах должен использоваться "событийный" тип передачи сообщений. Изменил скорость - сообщил об этом серверу, начал поворачивать торс - сообщил серверу. Таким образом тоже нагрузка падает. Но создает возможности для неприятных рассинхронизаций.

В общем, поверьте, вопрос про увеличение количества игроков - штука очень сложная и зачастую требует хорошо продуманной концептуальной мысли или же нового подхода. А поскольку сейчас есть куда как более важные проблемы, то едва ли мы это все увидим в МВО.

Edited by Nanotentacle, 18 February 2014 - 10:34 PM.


#66 Cr0c

    Member

  • PipPipPipPipPip
  • 146 posts
  • LocationLakinsk, Russia

Posted 20 February 2014 - 02:56 AM

Что за математика у вас? Какое "квадратичное увеличение"? Всё линейно.
Вот, например, сравним 12*12 и 24*24.
(12*12) + (12*12) = 2*(12*12) = 24*12 -- это во сколько раз больше, чем 24*24?
Или вы считаете, что если в бою будет 24 игрока вместо 12, то играть будет вдвое больше игроков?
Так их у нас конечное число, а не бесконечное, в отличии от количества лени шпротинок.

Edited by Cr0c, 20 February 2014 - 02:59 AM.


#67 Nanotentacle

    Member

  • Pip
  • 14 posts

Posted 22 February 2014 - 06:59 PM

Откуда эти цифры? Я ещё раз поясняю: в случае 12х12 пакет, отправленный одним игроком, отправляется 24 игрокам (он сам + его команда + команда противника). Т.е если все отправят по пакету, то будет 24х24, а никак не 12х24.

#68 Drug inside

    Rookie

  • 3 posts
  • LocationСанкт-Петербург

Posted 22 February 2014 - 07:22 PM

Забавней былоб не просто замесы на большой карте устраивать, а Сюжетку небольшую впихнуть, туда же ботов, танки, пехоту, авиацию и 20 - 30 мехов с обеих сторон. Каждым дать какую - либо цель, ну опять же, либо защищать либо атаковать, но при этом без смены сторон, как повезет ( хардкорчег ). Карту замутить как 2 альпин пик, хватит за глаза и за уши, на ней и то умудряются теряться. Так вот. 20 на 20 с целью, по поводу боезапаса, аирдропы же существуют - лидер группы отмечает на карте место дропа, в пределах допустимой зоны и обе сторон видят как с неба летит капсулка с аммо, которую все так ждали. Опять же, небольшие замесы у аирдропов тоже будут забавны. Ремонт меха, частичный, полевой так скажем, замутить на респе, если оторвало руку - ногу, итд пиши пропало, но броню подлатать да. Если потерял мех и не успел слиться с него - да, как выше писали, пиши пропало смотри на замесы, успел ливануть - выбирай другой.

#69 Aglan

    Member

  • PipPipPipPipPipPipPip
  • Big Brother
  • Big Brother
  • 713 posts
  • LocationForest Colony

Posted 23 February 2014 - 06:10 AM

Drug inside

На сюжетку нужны дополнительные ресурсы. Мы тут глобалку дождаться не можем никак, а Вы - про "сюжетку"...





1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users