Обрабатывать очереди в бесконечном циклеApache

Ответить
Anonymous
 Обрабатывать очереди в бесконечном цикле

Сообщение Anonymous »


у нас есть онлайн-игра на PHP, которая требует выполнения задач каждую секунду. В настоящее время мы делаем это, каждую минуту запуская задание cron для некоторого нашего сценария с помощью команды curl -s, чтобы каждую секунду обрабатывать некоторые задачи с помощью цикла for целая минута с таймаутом 60 с.

С этим методом мы столкнулись с двумя проблемами:

1- иногда запросы занимают более 1 минуты, что затем приводит к потере данных из-за таймаута 2- если мы удалим тайм-аут, иногда мы сталкиваемся с проблемами с высокой загрузкой процессора

должно быть даже вторым, игра в основном на этом основана.

наш текущий код:

set_time_limit(65); для ($i = 0; $i < 59; ++$i){ $this->doThings(); спать(1); } Я думал использовать while вместо for, чтобы рассчитать время со 100% точностью. Это лучше?

Задачи обычно не тяжелые, и наши квесты максимально оптимизированы.

Я попытался увеличить лимит времени ожидания и попытаться увеличить net_write_timeout в mysql cnf, это, похоже, хорошо решило проблему, но привело к перегрузке процессора..

Мне нужен официальный способ выполнять наши задачи каждую секунду, не теряя никаких данных и не создавая перегрузку процессора..
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Apache»