Привет. Не хочу устраивать холивар, необходимо написать демона на php
Задача такая: есть long-polling запрос к серверу с параметрами, например array('param1'=>'q1,q2', 'param2'=>'q3'), при получении ответа вызывается функция, которая разбирает и пишет результат в БД (запрос продолжает работать). Необходимо, чтобы этот запрос работал всегда, когда параметры установлены и ждал их появления, когда их нет. При этом есть необходимость менять параметры извне — через БД, файлы или мемкеш.
Как можно сообщить демону, что параметры изменились и необходимо перезапустить запрос? Пробовал разобраться в phpDaemon, но без толковой документации сделать это не получилось.
Очень как то вы запутанно все описали, я толком не понял. Вконтактовский мессенджер чтоли парсите?
Как конкретно в PHP не скажу, но обычные подходы такие:
Если параметры меняются НЕ часто, то их записывают в конфиг-файл и посылают демону UNIX-сигнал, например sighup: kill SIGHUP
Демон должен установить обработчик этого сигнала - при получении сигнала перечитывать конфиг.
Если меняются часто, то помимо самого "рабочего" сокета, который ждет этот long-pool запрос, открывают еще один - контрольный сокет (слущающий ru.php.net/manual/en/function.socket-listen.php) на котором ждут появления команд/новых параметров. Он может слушать локальный TCP/UDP порт или UNIX сокет, а то и pipe. Правда тогда появляется проблема, что нужно контролировать сразу 2 сокета - тут уже нужны потоки или select/epool.
Ну и третий вариант - просто периодически опрашивать БД/перечитывать конф-файл, например после окончания long-pool запроса или по sleep() если запросов нет. Но это уже детский сад))