orange_blue, где, например?
Это серые, если не черные технологии. «Бывает», что и через вебку смотрят и микрофон слушают. Для продаж, вероятно, удобно. Но..
LolaHuligang, это способ установить соответствие между URL и выполняемым кодом. Похожим образом роутинг организован и в других фреймворках: Laravel, Lumen, Slim.
Если код простой, можно как в вашем случае прямо функцию записать. Если объемный, можно его держать в отдельном файле/классе и из роутера ссылаться на метод класса.
Чтобы это работало, от веб-сервера (apache, nginx) требуется реализовать т.н. паттерн "front controller" – когда запросы к несуществующим файлам переадресуются на корневой index.php, а тот уже разбирается, как быть.
Насколько большой общий список игроков? Как характеризуется игрок: по 32-битному целому id, или текстовое имя пользователя? Может ли игрок быть на нескольких серверах одновременно?
Mdmitr, на PHP всё работает, т.к. нет ограничений same origin. Дополнил ответ рабочим кодом под NodeJS, у меня даёт с вашим токеном ответ с данными о турах.
Наконец, пинговать можно редко: раз в 5 минут. Даже при 3 тыс. одновременных посетителей, 3000 пингов за 300 секунд это 10 пингов в секунду. Можно вынести распределение баннеров из БД в Redis, если позволяет хостинг.
rinaz22, кроме подтверждения живого коннекта - пингом или, скажем, соединением websocket - иного надёжного способа, наверное, не существует, т.к. может, например, просто оборваться инернет у пользователя и никакой сигнал об уходе от него не пройдёт.
Другой вариант, наверное, просто предположить, что дольше 10 минут никто на сайте не зависнет, поэтому баннер можно считать свободным автоматически через 15 минут.