Я не знаю, насколько вы продвинуты, или даже если у вас есть root-доступ к вашему серверу, что потребуется, но это один из возможных способов ... он использует несколько разных технологий и, вероятно, подойдет для большого масштаба приложение, а не маленькое. Но я все равно буду вам советовать.
Используются следующие технологии / стеки (в дополнение к PHP, как вы упомянули):
- WebSockets (поверх node.js)
- JSON-RPC-сервер (внутри node.js)
- Gearman
Что бы вы ни делали, это с вашего клиента (например, через JavaScript), когда страница загружается, устанавливается соединение с node.js через WebSockets), вы можете использовать что-то вроде socket.io для этого ).
Затем, когда вы решаете, что хотите выполнить задачу (что может занять много времени ...), вы отправляете запрос на свой сервер, это может быть некое необработанное тело в кодировке JSON, или это может быть просто GET /do/something
. Важно то, что происходит дальше.
На вашем сервере, когда работа получена, вы запускаете новую работу в Gearman, добавляя задачу на ваш сервер. Затем он обрабатывает вашу задачу, и это будет не блокирующий запрос, поэтому вы можете немедленно ответить клиенту, который отправил запрос со словами «эй, мы обрабатываем вашу работу».
Затем ваш сервер со всеми работниками Gearman получает задание и начинает его обрабатывать. Допустим, это может занять 5 минут. После завершения работник отправляет сообщение в кодировке JSON, которое отправляет на сервер node.js, который получает его через JSON-RPC
.
После получения сообщения оно может отправить событие на любые соединения, которые должны знать о нем, через веб-сокеты.
Однажды мне понадобилось что-то подобное для проекта, и мне удалось выучить основы node.js за день (уже имея большой опыт работы с JS). На второй день я получил полную платформу уведомлений о заданиях на передачу сообщений.