Насколько большой общий список игроков? Как характеризуется игрок: по 32-битному целому id, или текстовое имя пользователя? Может ли игрок быть на нескольких серверах одновременно?
Mdmitr, на PHP всё работает, т.к. нет ограничений same origin. Дополнил ответ рабочим кодом под NodeJS, у меня даёт с вашим токеном ответ с данными о турах.
Наконец, пинговать можно редко: раз в 5 минут. Даже при 3 тыс. одновременных посетителей, 3000 пингов за 300 секунд это 10 пингов в секунду. Можно вынести распределение баннеров из БД в Redis, если позволяет хостинг.
rinaz22, кроме подтверждения живого коннекта - пингом или, скажем, соединением websocket - иного надёжного способа, наверное, не существует, т.к. может, например, просто оборваться инернет у пользователя и никакой сигнал об уходе от него не пройдёт.
Другой вариант, наверное, просто предположить, что дольше 10 минут никто на сайте не зависнет, поэтому баннер можно считать свободным автоматически через 15 минут.
как вы идентифицируете пользователей? Что, если один откроет две вкладки с сайтом? Что, если одну нормальную, а вторую приватную - без кук? Что, если у пользователя AdBlock и он не загружает баннеры вообще?
Андрей Бойченко, вы упоминали поле position, которого нет в примере. Которое, как я понял, может быть древовидным - т.е. под sort_1 не значение, а ветвь?
Сортировать собираетесь по всем? Т.е. при двух товарах с одинаковыми sort_0, выше тот, у которого меньше(больше( sort_1, и так далее? Порядок таких полей как определён, алфавитно?