Собственно есть у меня такое хобби как разработка браузерных игр. Когда то в своё время я на этом деле перешёл от Си к php. Но суть дела не в этом. Есть такая задачка которую хотел бы попробовать решить с вами вместе.
Вкратце я хочу организовать движение людей по карте в режиме онлайн. К примеру у нас есть карта в виде матрицы со своими координатами:
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
Предположим что у нас в клетке 1 сейчас находится один пользователь (А), а в клетке 7 находится пользователь Б:
| A | 2 | 3 | 4 |
| 5 | 6 | Б | 8 |
Я хочу сделать что б при движении пользователя A к примеру в клетку 4, у пользователя Б с минимальной задержкой отобразилось движение юзера А. В идеале к примеру я стою на месте - и вижу как движутся другие пользователи по карте.
Задача весьма простая, и реализована уже в куче игр. Как это реализовывают на обычных (не браузерных) играх я не в курсе, но как вариант реализации у себя вижу следующий:
- При движении пользователя А заносится информация в базу данных что
А с клетки 1 движется в клетку 7.
-
Пользователь Б постоянно сканируют базу данных на изменение в ней. И в случае если видят что в базе записано что кто то куда то движется - тогда какае то там функция запускается на стороне юзера Б и двигает картинку пользователя А в указанную в базе точку.
-
Ну и тоже самое на оборот. Т.е. по той же самой системе пользователь А будет видить что пользователь Б начал своё движение.
В принципе такая система работает и в реализации весьма простая но я есть ОЧЕНЬ БОЛЬШОЙ минус, это конечно же БД. Из-за того что постоянно надо сканировать её на изменение данных - будет очень большая нагрузка. Вариант с двумя пользователями на карте конечно нагружать сильно не будет, но что если их будет не два, а хотя бы 500? если предположить что конектимся к базе за новой информацией раз в 1 секунду, то база получит 500 обращений в сек постоянно что весьма туго.
Прошу у вас помощь в решении данной проблемы. Может кто знает еще какие то варианты решения данной задачи (не обязательно на пхп, без разницы на чем, главное алгоритм).