PHP - Как отбросить несколько запросов на другую страницу, получить результаты по завершении запросов и отобразить на исходной странице? - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть маленькое php-приложение, которое я собрал, чтобы автоматизировать некоторые ручные процессы, которые были утомительны и занимали много времени. Приложение в значительной степени представляет собой графический интерфейс, который использует ssh и «устанавливает» программное обеспечение для целевых машин на основе атомных изменений # из системы контроля версий (работайте, если это имеет значение). В настоящее время приложение запускает каждую установку в новом всплывающем окне. Итак, скажем, я устанавливаю программное обеспечение на 10 разных машин, я получаю 10 разных всплывающих окон. Это становится слишком много. Какие есть варианты для запуска этих процессов и отображения результатов на одной странице?

Я думал, что мог бы иметь одно всплывающее окно, которое динамически создавало бы div для каждой установки, которую я запускал, и делать ajax-вызов для каждой, а затем отображать вывод для каждой установки в соответствующем div. Единственная проблема в том, что я не знаю, как я могу запустить эти процессы параллельно. Это займет слишком много времени, если мне придется ждать, пока каждый выйдет, сделать свое дело и выплюнуть результаты обратно. Я использую jQuery, если это помогает, но я ищу в основном идеи архитектуры высокого уровня. Примеры кода приветствуются, но код psuedo просто отлично.

1 Ответ

0 голосов
/ 21 декабря 2011

Я не знаю, насколько вы продвинуты, или даже если у вас есть 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). На второй день я получил полную платформу уведомлений о заданиях на передачу сообщений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...