Windows_user Posted November 13, 2016 Share Posted November 13, 2016 Здравствуйте! У меня назрел вопрос про возможность оптимизации обмена данными между сервером и клиентом. Предположим на сервере играет 20 человек и при открытии карты каждый игрок видит координаты всех остальных с обновлением (пусть) 1 раз в секунду. То есть сервер передает каждому из 20-ти игроков инфомацию об других, т.е. это 20*19=380 операций за секунду. Это не много. Но если на сервере играет 100 игроков, тогда их уже будет около 10000, а если 500, то 250000 и т.д. Это уже большая нагрузка и сервер априори не может тянуть большой онлайн. Идея заключается в том, чтобы сервер отправлял информацию только о рядом стоящих игроках, тем самым избегал лишних действий, что может оптимизировать нагрузку. Хотелось бы узнать ваши мысли как это можно реализовать и можно ли вообще? Link to comment
Kenix Posted November 13, 2016 Share Posted November 13, 2016 (edited) Сервер это уже и так делает, чтобы получить все элементы, которые тебе нужно используй функцию getElementsByType в купе с getElementPosition (если хочешь получить позицию элемента), также у этой функции есть дополнительный аргумент, который возвращает элементы, которые находятся в стриме (это те елементы, которые видит игрок - зона примерная в 250м, остальные элементы уже не будут в стриме) Edited November 13, 2016 by Kenix Link to comment
Fabervox Posted November 14, 2016 Share Posted November 14, 2016 @Windows_user, ну если у вас на карте показывает всех игроков, тогда как же вы будете получать только тех что рядом? Можно расспаралелить этот процесс, сделав карту на CEF, и вебсервер который будет просто получать координаты всех игроков, и выдавать им эти данные. При этом вебсервер может передавать и какие-то личные неособо конфиденциальные данные, так как известен IP клиента. Вебсервер при должной настройке будет рассходовать немного ресурсов, но главное что он может быть хоть на другой машине. Link to comment
Windows_user Posted November 14, 2016 Author Share Posted November 14, 2016 16 hours ago, Kenix said: Сервер это уже и так делает, чтобы получить все элементы, которые тебе нужно используй функцию getElementsByType в купе с getElementPosition (если хочешь получить позицию элемента), также у этой функции есть дополнительный аргумент, который возвращает элементы, которые находятся в стриме (это те елементы, которые видит игрок - зона примерная в 250м, остальные элементы уже не будут в стриме) Вы наверное меня неправильно поняли. Когда на сервере играет 500 человек, то при открытие на F11 карта оказывается загаженная игроками. Как убрать квадратики от удаленных игроков и ники от тех, кто находится близко? Должны отображаться на радаре только те игроки, которые находятся близко и без ников. Link to comment
obuhhh Posted November 14, 2016 Share Posted November 14, 2016 @Windows_user, это надо рыться в ресурсе карты, которая отображается на ф11. И использовать приемы, которые посоветовали выше, чтобы исключить дальних игроков. Link to comment
TheNormalnij Posted November 15, 2016 Share Posted November 15, 2016 Наиболее часто встречался с иррациональным использованием элемент датой, Если у клиента она будет устанавливаться в рендере, то это приведет к несоизмеримой нагрузке на cpu. Диагностируется в performance browser. Лечение - отключение синхронизации элементдаты( последний аргумент false ), пересмотр логики синхронизации, использование триггеров. Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now