тогда другой вопрос, какие границы критической секции?
Когда вы снимаете блокировку с файла?
Тут нужно анализировать в редис (или другой базе - не важно что это за хранилище), а не отправили такой же запрос недавно (либо опираться на живучесть сообщений в слотах редиса, либо сохранять метку времени и сравнивать все сообщения (поиск по хешам, если на то пошло)).
if(какой-то условие) {
die();
}
public function open()
{
if (!$this->fp) {
$this->fp = fopen($this->sPath, 'w+');
}
if (!flock($this->fp, LOCK_EX | LOCK_NB)) {
return false;
}
ftruncate($this->fp, 0);
fwrite($this->fp, getmypid());
fflush($this->fp);
return true;
}
$oRedis->set('uniq_id', json_encode($_REQUEST));
exec('php worker.php');
$arRequest = $oRedis->get('uniq_id');
run($arRequest);
вы мне будете рассказывать за инструмент, которым я пользуюсь много лет как раз для озвученной задачи?
Вариант работы через воркеры это просто попытка решить проблему.
Она как раз в этом и заключается как запустить один worker.php, при условии что запускается 2 handler.php