Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Покритикуйте решение

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Shader



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Суть задачи:

  • Из веб-приложения необходимо запускать CLI-скрипты и выполнять команды.
  • CLI-скрипт должен возвращать данные о процессе выполнения и обновлять прогресс-бар. Получается, нам необходим механизм реализации IPC (inter-process communication), который позволит запускать скрипты из командной строки вне зависимости от того, на каком языке они написаны.

 
Ход размышлений:

  • Решение в лоб - использовать именованные каналы (pipe), но они работают, как fifo, поэтому единожды получив из них данные, можно повторно получить пустой ответ, если второй процесс ничего не успел сделать за итерацию.  
  • Писать статусы в файл и читать последнюю строку - топорно. Выбор пал на Server-sent Events (SSE), что исключает Internet Explorer из списка совместимых браузеров, но невелика потеря.

 
Решение:

  1. Определяемся с форматом скрипта - скрипт построчно рапортует о процессе выполнения, соблюдая формат "DD# SS", где DD - прогресс выполнения в процентах, # - разделитель, SS - строка с текстом сообщения. Символ процента использовать нежелательно, т.к. CMD резервирует его под переменные.
    Пример CMD-скрипта
    Пример SH-скрипта
    Пример Python-скрипта
  2. Javascript-библиотека, вешающая обработчики addEventListener
    Исходный код
  3. Собственно, сам IPC-бэкенд, написанный на PHP и обёрнутый в класс
    Исходный код
  4. Создаём кнопку и вешаем на неё вызов IPC.startTask()

 
Дополнительная информация:

  • Парсер, похоже, съедает отступы в коде. Простите -_-
  • Вся эта радость может работать, как с CLI-скриптами, так и с консольными командами. Исходники в примерах обрезаны для сокращения объёма, но модифицировать их несложно.
  • Ничто не мешает получать данные не из CLI, а выполнять какую-то долгую процедуру в рамках обычного PHP-скрипта.
  • Вырезана часть проверок, опять же для сокращения кода. Также вырезан обработчик beforeunload, страхующий пользователя от случайного прерывания выполнения. Убрана универсальность IPC.js, чтобы опять же сократить код.

 
Имеет ли подобное решение право на жизнь? Есть ли более лаконичный и логичный способ работать с CLI-скриптами, реализуя условную независимость от платформы?

Всего записей: 54 | Зарегистр. 14-09-2003 | Отправлено: 13:59 17-03-2015
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Shader
ну я бы так и сделал. разве что возвращал данные в json формате - проще, если нужно вернуть что то еще помимо процентов, но это зависит от ситуации.

Всего записей: 15091 | Зарегистр. 20-09-2014 | Отправлено: 15:53 17-03-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Покритикуйте решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru