Я запускаю PHP-приложение уровня предприятия. Это браузерная игра с тысячами пользователей в Интернете по инфраструктуре, которую мой босс отказывается обновлять, а оборудование работает на 2-3 системной нагрузке (yep linux) в любое время. Во всяком случае, это не настоящая проблема. Реальная проблема заключается в том, что некоторые пользователи ждут загрузки сервера (в прайм-тайм), и они приносят свои клики мыши, и они нажимают одну и ту же кнопку отправки, как 10-20 раз, одновременно отправляя 10-20 запросов, пока сервер по-прежнему создавая первоначальный запрос, тем самым не обновляя кэш и базу данных.PHP, связанный с параллелизмом
В настоящее время у меня есть выходная переменная для каждого запроса, которая действительна в течение 2 минут, и у меня есть блокировка «мьютекса», которая в основном является флагом внутри memcache, который, если найден, блокирует выполнение сценария дальше, но кликер мыши делает так много запросов одновременно, что они работают почти одновременно, что является большой проблемой для меня.
Как вы, большинство людей StackOverflow, занимающихся этой проблемой. Я думал о том, чтобы помечать cookie/сессию, но я думаю, что я попаду в ту же проблему, если сервер будет перегружен. Оптимизация невозможна, источник 7 лет и довольно оптимизирован, без запросов на большинстве страниц (отключение кэш-памяти) и только запрос базы данных на определенный пользовательский ввод, как тот, который я пытаюсь предотвратить.
Да, это процедурный код без реальных объектов. Машины запускают PHP 5, но сам код больше связан с PHP 4. Я знаю, что я знаю, что это старое и прочее, но мы не можем избавить ресурс от переписывания всего этого беспорядка, поскольку большинство оригинальных разработчиков оставили это знать, как материал переплетается и да, я в основном исправляю старые дыры. Но насколько я знаю, это общая проблема на загруженных PHP-сайтах.
P.S: Отключение кнопки с помощью javascript для отправки не является вариантом. Настоящие читеры - это продвинутые пользователи. Один из них написал бот-кликер и упаковал его в качестве расширения Google Chrome. Не спрашивайте, как я с этим справился.
Как вы с этим справились? :) –
Я использую websockets. Модель процесса за запрос очень плохо подходит для такого рода вещей. – rdlowrey
Да, приложение устарело, и у него нет такой модной истории MVC/Bigpipe/JSON/HTML5, которую используют современные веб-сайты. У него слишком много «исправлений», чтобы просто поместить этот интерфейс поверх – Sk1ppeR