Как можно оптимизировать (уменьшить) передачу данных?

Для сетевой игры я использую связку endel/NativeWebSocket на стороне клиента и Ratchet серверная сторона, сервер по сути является просто приёмником от одного клиента и передатчиком остальным находящимся в одной комнате, то есть там ничего не обрабатывается, просто передаётся.
С клиента же у меня отправляются данные каждые 0.2сек, а точнее каждый фиксированный кадр (0.02сек) складываются данные в массив и потом объединяются и отправляются раз в 0.2сек (если есть действие какое-то).

Почему такой интервал? Самый оптимальный подобрал чтобы и быстро реагировало и плавно было.

Всё работает, то есть бегают 2 персонажа с анимацией по сети, прицеливаются стреляются и т.д., но вот пока количество передаваемых данных меня немного напрягает, на данный момент передаются постоянно следующие данные
position.x | position.y | position.z | axisVert | axisHoriz | AngleY | Speed | Aim | Fire #

вот так выглядит сформированная строка одного кадра и далее как оно строкой передаётся с разделителем #
-1.001|0|-0.023|-0.045|0.280|45|2|1|0#-1.02|0|-0.03|-0.025|0.210|47|2.2|1|0.....

с учётом что символ это 2 байта то от одного клиента будет исходить 5кб в секунду, я не знаю много ли это или мало, не замерял другие аналоги типа миррор или фотона.
Вот собственно и вопросы:
Много ли это или нормально?
Как можно оптимизировать такую передачу?
Как рассчитать сколько людей потянет? (при средней скорости 50Мб/сек что получается 10000 передач в сек? либо как это посчитать хоть примерно)
Какие могут возникнуть проблемы при данной реализации?

Вот так оно сейчас выглядит
https://www.youtube.com/watch?v=Y6pVnDALKLA
  • Вопрос задан
  • 206 просмотров
Решения вопроса 1
Для начала:
MessagePack, Protobuf и их альтернативы для сериализации данных.
Дельта-кодирование - для уменьшения разрядности чисел.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы