есть блок кода (назовем его $foo->bar() ) который должен выполнится один раз и только один раз. как это организовать в многопользовальском сценарии?
поясню, есть сценарий space.php к нему обращаются множество пользователей, в конкретном случае 20 человек.
мы проверяем, все ли пользователи дали ответ и если все - выполняем код $foo->bar() если же нет - пользователю предлагается дать ответ или ждать других участников если ответ дан.
по сути мне нужно вполнять $foo->bar() только когда последний пользователь даст ответ, либо по истечению тайм-аута
по окончанию работы $foo->bar() начинаем новый раунд, и все пользователи снова могут дать ответ. в ходе работы $foo->bar() есть логирование его выполнения, исходя из которого видно, что код инициализируется несколько раз.
как я вижу проблему: пользователи (user1, user2, ...., user20) обращаются к сценарию space.php user1, user2 и user3 дали ответ, ждут, ждут, ждут, обновляя страницу каждый раз $foo->bar() не может быть выполнен пока не дал последний пользователь user10. user1, user2 и user3 обновляют и ждут user10 дает наконец ответ и запускает $foo->bar() user1 и user3 обновляя страницу так же запускают $foo->bar() клонируя процесс. поскольку первый процесс еще не был выполнен, то и условия для запуска соблюдены.
ОК. делаем костыль. в базе данных , в таблицу сценария, объединяющего пользователей, добавил поле startrun default 0 и поред запуском $foo->bar() проверяем значение startrun: если 1 - процесс уже запущен. ожидаем выполнения. если 0 - устанавливаем startrun = 1, дабы предотвратить клонирование процесса, и запускаем процесс $foo->bar()
проблема в том, что костыль не работает. исходя из логов код по прежнему несколько раз запускается.
итак, как выполнить код, один только раз, в многопользовательском сценарии?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Использую ОктябрьСоздана страница заказа, где собирается вся информация
После того, как устанавливаю параметр p: при коннекте к БД, в nginx error логах начинают вылетать ошибкиКак понял, данные ошибки возникают когда...
Есть массив данных price, полученный с помощью serialize Выглядит так: s:6:"54437";s:4:"5443";s:6:"5442