Для сетевой игры я использую связку 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